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.json,当请求作为/GetData/1234.xml时,xml仍然可以作为一个适当的肥皂服务在一些其他url,与强类型wsdl合同?

使用Stream作为GetData的返回值是不可行的,就像它符合前两个要求一样,wcf无法创建一个完整的wsdl规范,因为它不知道结果流的内容是什么.

最佳答案
您应该有两个独立的方法,它们采用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实例来承载合同的实现.

转载注明原文:RESTful WCF服务可以在JSON(P)和XML中进行响应,仍然可以用作SOAP Web服务? - 代码日志