2010-11-10 34 views
1

J'ai écrit un service web très simple qui renvoie un document XML.Comment puis-je obtenir un simple service web C# pour retourner <? Xml version = "1.0" encoding = "utf-16"?> Header?

L'en-tête de ce document est actuellement <?xml version="1.0" encoding="utf-8" ?>

et je voudrais qu'il revienne <?xml version="1.0" encoding="utf-16" ?>

Comment puis-je modifier le codage de sortie par défaut dans le fichier .asmx ou .cs?

smo.asmx 
<%@ WebService Language="C#" Class="smo" %> 


smo.asmx 
using <blah> 

[WebService(Namespace="http://www.bl.uk/webservices/")] 
public class smo : WebService 
{ 
    [XmlRoot(ElementName = "SQLServer")] 
    public class CDatabaseBackup 
{ 
    public string ServerName; 
    public string DatabaseCount; 
    } 

// 
// Generic SMO query processor 
// 
[WebMethod(Description = "WMIClassProperty: ", EnableSession = false, CacheDuration=60)] 

public CDatabaseBackup smoDatabaseBackupStatus(string SQLServerName) 
{ 
    CDatabaseBackup result = new CDatabaseBackup(); 
    Server svr; 
       <blah> 
       return result; 
     } 

En fin de compte ce service Web sera utilisé dans une fonction SQL Server et convertie en un type de données xml. Selon la documentation, ceci doit être UTF-16.

alter 
procedure monitor_sqlbackupaudit 
as 
begin 

declare @l_xml_result nvarchar(max) 
set @l_xml_result = (select dbo.uspSMODatabaseBackup('sqlprod1vs')) 
--set @l_xml_result = replace(@l_xml_result,'UTF-8','UTF-16'); 

declare @l_xml  xml 
set @l_xml  = @l_xml_result 

end 
go 

exec monitor_sqlbackupaudit 

Msg 9402, Level 16, State 1, Procedure monitor_sqlbackupaudit, Line 15 
XML parsing: line 1, character 38, unable to switch the encoding 
+0

Si je triche et décommente la deuxième instruction "set" pour remplacer UTF-8 à UTF-16 alors la procédure stockée fonctionne ... Je préfère ne pas tricher, et je suis plutôt intéressé à faire cela correctement. (Eh bien, plus vrai que le hack and paste que j'utilise habituellement :) – Guy

+0

Je ne peux pas vraiment voir ce que vous faites. Comment créez-vous le XML? Vous devez renvoyer le code XML dans l'encodage attendu. –

+0

Le XML est créé en retournant la classe, dans ce cas CDatabaseBackup de la méthode que j'appelle. Il est automatiquement sérialisé dans un document XML. Il semble que le framework C# crée automatiquement les choses mais dans mon environnement il utilise UTF-8. – Guy

Répondre

1

Vous pouvez configurer votre service Web pour traiter UTF-16 au lieu de UTF-8 dans la section de la mondialisation de web.config. Les attributs requestEncoding et responseEncoding de la balise globalisation doivent être définis sur UTF-16.

<globalization requestEncoding="utf-8" responseEncoding="utf-8"/> 

doit être converti en

<globalization requestEncoding="utf-16" responseEncoding="utf-16"/> 

Ce changement permettra au service Web de sortie UTF-16, mais il faudra aussi le client de faire sa demande en UTF-16.

+0

Merci, je vais examiner cela. Je vais devoir défaire mon hack pour voir si ça marche !! – Guy