2009-03-03 12 views
9

JSON(P)とXMLの両方で応答できるRESTfulなWCFサービスで、まだSOAP Webサービスとして使用されていますか?

[ServiceContract] public interface IService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "GetData/{id}.{format}")] 
    ResponseData GetData(string id, string format); 
} 

リクエストされたときにサービスがjsonで応答するようにする方法はありますか? /GetData/1234.json、xmlは/GetData/1234.xmlとして要求され、依然として強く型付けされたwsdl契約で、他のURLで適切な石鹸サービスとして利用できるようになりますか?

GetDataの戻り値としてStreamを使用することは、最初の2つの要件を満たしているかのように動作不能です。結果のStreamの内容がわからないため、wcfは完全なwsdl仕様を作成できません。

+0

[codemeit](http://www.codemeit.com/wcf/wcf-restore-pox-json-and-soap-coexist.html)による[WCF RESTful POX、JSON、SOAP共存]を参照してください。 //stackoverflow.com/users/11413/codemeit)。 –

答えて

12

あなた IDと形式を取る二つの別々のメソッド(と彼らはResponseDataを返す共有の実装を呼ぶだろう)異なるWebGet attributesを持っている必要がありますSOAPエンドポイントの場合

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "GetData/{id}.{format}.xml", 
     ResponseFormat=WebMessageFormat.Xml)] 
    ResponseData GetDataXml(string id, string format); 

    [OperationContract] 
    [WebGet(UriTemplate = "GetData/{id}.{format}.json", 
     ResponseFormat=WebMessageFormat.Json)] 
    ResponseData GetDataJson(string id, string format); 
} 

を、あなたはできるはずですどちらのメソッドを呼び出すこともできますが、契約の実装をホストする別のServiceHostインスタンスを持つ必要があります。

関連する問題