我已经设置了一个WCF服务,它将在同一个方法中同时接受JSON和XML,并且同时支持SOAP和REST。
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辅助角色了。
答案 0 :(得分: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>
它可能在没有包装请求的情况下也可以工作,但为了保持一致性,我也将这个方法包装起来。
答案 1 :(得分: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
}
}