2009-03-03 62 views
9

给定的合同,如:RESTful WCF服务可以在JSON(P)和XML中都响应,仍然可以用作SOAP Web服务?

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

是否存在时所要求的方式去使用JSON响应服务:当作为/GetData/1234.xml并请 /GetData/1234.json,XML仍然可以作为一个适当的SOAP服务在其他网址,与强类型WSDL合同?

使用Stream作为GetData的返回值是行不通的,就像它满足前两个要求一样,wcf不能创建完整的wsdl规范,因为它不知道生成的Stream的内容是什么。

+0

请参阅[codemeit](http://www.codemeit.com/wcf/wcf-restful-pox-json-and-soap-coexist.html)中的[WCF RESTful POX,JSON和SOAP共存] //stackoverflow.com/users/11413/codemeit)。 – 2009-03-04 07:20:34

回答

12

应该有哪些需要ID和格式两种不同的方法(他们会打电话共享的实现,它返回ResponseData),其中有不同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); 
} 

对于SOAP端点,你应该能够调用其中任何一种方法,但您将必须有一个单独的ServiceHost实例来执行合同。