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 つの異なるエンドポイントを指定することをお勧めします。1 つはXMLシリアル化データ用、もう 1 つはJSONシリアル化データ用です。さあ、あなたはRESTアーキテクチャを使用しています.....それをフルに活用してみませんか??!

于 2012-10-18T05:18:22.423 に答える
1

のプロパティを に設定することにより、この回答に示されているように、これは実際には二重宣言なしで実行できます。webHttpBehaviorautomaticFormatSelectionEnabledtrue

于 2013-10-22T19:58:24.790 に答える