3

如何在 WCF RESTful 服务中创建服务合同以采用XmlSerializerFormatWebMessageFormat.Json 。

我需要的是从需要进行 XML 序列化的 ASP.Net 1.1 后面的代码和从 Json 序列化的 jQuery ajax 调用“CallADSWebMethod”操作合同。

服务合约

[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" />
4

2 回答 2

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 架构.....为什么不充分利用它??!

于 2012-10-18T05:18:22.423 回答
1

这实际上可以在没有双重声明的情况下通过webHttpBehavior'automaticFormatSelectionEnabled属性设置为true.

于 2013-10-22T19:58:24.790 回答