WCF服务合同是XML和Json序列化的

时间:2012-10-18 05:01:44

标签: asp.net wcf web-services rest serialization

如何在WCF RESTful服务中创建服务合约以及 XmlSerializerFormat 以及 WebMessageFormat.Json

我需要的是从ASP.Net 1.1后面的代码调用“CallADSWebMethod”操作契约,该代码需要XML序列化和 来自jQuery序列化的jQuery ajax。

服务合同

[ServiceContract, XmlSerializerFormat]
    public interface IService
    {
        [OperationContract, XmlSerializerFormat]
        [WebInvoke(UriTemplate = "/CallADSWebMethod",
                   Method = "POST",
                   BodyStyle = WebMessageBodyStyle.WrappedRequest,
                   ResponseFormat = WebMessageFormat.Json)]
        VINDescription CallADSWebMethod(string vin, string styleID);
    }

终端信息

        <endpoint address="basic"
                  binding="basicHttpBinding"
                  name="httpEndPoint"
                  contract="ADSChromeVINDecoder.IService" />
        <endpoint address="json"
                  binding="webHttpBinding"
                  behaviorConfiguration="webBehavior"
                  name="webEndPoint"
                  contract="ADSChromeVINDecoder.IService" />
        <endpoint contract="IMetadataExchange"
                  binding="mexHttpBinding"
                  address="mex" />

2 个答案:

答案 0 :(得分:2)

您可以做的是像这样指定您的Web服务:

     [OperationContract]
    [WebInvoke(Method = "POST", 
        ResponseFormat = WebMessageFormat.Xml, 
        BodyStyle = WebMessageBodyStyle.WrappedRequest, 
        UriTemplate = ""/CallADSWebMethod"")]
    [WebInvoke(Method = "POST",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        UriTemplate = ""/CallADSWebMethod"")]
VINDescription CallADSWebMethod(string vin, string styleID);
    }

然而,我建议你做的是指定2个不同的端点:一个用于 XML 序列化数据,另一个用于 JSON 序列化数据。来吧老兄,你正在使用 REST架构 .....为什么不充分利用它?!

答案 1 :(得分:1)

通过将webHttpBehavior的{​​{1}}属性设置为automaticFormatSelectionEnabled,可以在没有this answer所示的双重声明的情况下完成此操作。