2010-06-03 44 views
1

我的方法不返回标头,只是根元素xml。WCF方法返回XML片段,但没有xml UTF-8标头

internal Message CreateReturnMessage(string output, string contentType) 
      { 
       // create dictionaryReader for the Message 
       byte[] resultBytes = Encoding.UTF8.GetBytes(output); 
       XmlDictionaryReader xdr = XmlDictionaryReader.CreateTextReader(resultBytes, 0, resultBytes.Length, Encoding.UTF8, XmlDictionaryReaderQuotas.Max, null); 

       if (WebOperationContext.Current != null) 
        WebOperationContext.Current.OutgoingResponse.ContentType = contentType; 

       // create Message 
       return Message.CreateMessage(MessageVersion.None, "", xdr); 
      } 

然而,输出我得到的是:

<Test> 
    <Message>Hello World!</Message> 
</Test> 

我想输出为渲染:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<Test> 
    <Message>Hello World!</Message> 
</Test> 

回答

0

所以假设output参数是在即将到来的...

<Test> 
    <Message>Hello World!</Message> 
</Test> 

什么你预计会发生?你不是在写XML文件,只是通过阅读器读取output字符串。读者类不会添加任何东西到你的片段,它是一个读者,而不是作家。

你可以这样做,而不是...它会解析你的输出为XML,然后你可以添加一个声明,然后再给它的消息。

var output = "<Test><Message>Hello World!</Message></Test>"; 
var xd = XDocument.Parse(output); 
xd.Declaration = new XDeclaration("1.0", "utf-8", "yes"); 
return Message.CreateMessage(version, messageFault, xd.ToString()); 
+0

我建立使用的XDocument和使用下面的方法将在返回结果的XML: [OperationContract] [WebGet(UriTemplate =“/result.xml”)] Message GetResult(); 类方法: 公共信息调用getResult(){ VAR 输出=; “的Hello World!” 返回CreateReturnMessage(输出 “文本/ XML”) } 已经尝试添加XDeclaration但输出显示如下: <字符串的xmlns = “http://schemas.microsoft.com/2003/10/Serialization/” > Hello World! horls 2010-06-03 16:24:20