2009-03-03 11 views
9

Biorąc pod uwagę umowę takich jak:RESTful usługa WCF, która może odpowiadać w obu JSON (P) i XML i nadal służyć jako usługa sieci Web SOAP?

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

Czy istnieje sposób, aby uzyskać usługę do reagowania z json żądanie jako: /GetData/1234.json, xml żądanie i jak /GetData/1234.xml nadal będzie dostępny jako odpowiednia usługa mydła w innym adresie URL, z mocno napisaną umową wsdl?

Użycie strumienia jako wartości zwracanej dla GetData nie działa, tak jak gdyby spełniało pierwsze dwa wymagania, wcf nie może utworzyć pełnej specyfikacji wsdl, ponieważ nie ma pojęcia, jaka będzie zawartość wynikowego strumienia.

+0

patrz [WCF relaksującego POX JSON i SOAP Coexist] (http://www.codemeit.com/wcf/wcf-restful-pox-json-and-soap-coexist.html) do [codemeit] (http: //stackoverflow.com/users/11413/codemeit). –

Odpowiedz

12

Ty powinny posiada dwie oddzielne metody, które biorą identyfikatora i formatu (i nazwałabym wspólną realizację zwracającą ResponseData), które mają inny WebGet attributes:

[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); 
} 

dla punktu końcowego SOAP, powinieneś być w stanie aby wywołać którąś z tych metod, ale trzeba będzie mieć osobną instancję będącą hostem implementacji umowy.

Powiązane problemy