2011-02-10 140 views
1

我已经建立了一个WCF服务,它将以同一方法同时接受JSON和XML,并支持SOAP和REST。WCF REST请求和响应中的XML格式

JSON工作正常,但我不知道XML应该如何显示。

界面看起来是这样的:

[ServiceContract] 
public interface IWebService 
{ 
    [OperationContract] 
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare)] 
    string[] EchoArray(string[] stringArray); 
} 

如果可能的话,我想保持XML尽可能的简单,没有命名空间,就像这样:

<stringArray> 
    <string>hello</string> 
    <string>hola</string> 
</stringArray> 

的反应应该是简单以及。

如果它有什么不同,我会在代码中完成所有工作,不需要任何web.config。

这是我可以使用Azure辅助角色。

回答

1

我决定去一个包请求而不是裸露的(因为其他方法所需要的话),并推断出如何格式化。

首先,我改变了

[ServiceContract] 

[ServiceContract(Namespace = "")] 

那么这工作:

<EchoArray> 
    <stringArray xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
     <a:string>hello</a:string> 
     <a:string>hola</a:string> 
    </stringArray> 
</EchoArray> 

这将没有包装的请求可能工作,但为了保持一致性我做这个方法也包装好了。

0

如果你想控制的XML是什么样子,你可以这样做:

[ServiceContract] 
public interface IWebService 
{ 
    [OperationContract] 
    [WebInvoke(BodyStyle = WebMessageBodyStyle.Bare)] 
    StringArray EchoArray(StringArray stringArray); 
} 

public class StringArray : IXmlSerializable { 
     public XmlSchema GetSchema() { 
      return null; 
     } 

     public void ReadXml(XmlReader reader) { 
      // However you have formatted it 
     } 

     public void WriteXml(XmlWriter writer) { 
      // However you want it formatted 
     } 
}