RESTful WCF服务,可以用JSON(P)和XML进行响应,还可以用作SOAP Web服务吗?

时间:2009-03-03 19:27:29

标签: wcf json rest

给出如下合同:

[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合约?

使用Stream作为GetData的返回值是不可行的,就好像它满足前两个要求一样,wcf无法创建完整的wsdl规范,因为它不知道结果Stream的内容是什么。< / p>

1 个答案:

答案 0 :(得分: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实例来托管合同的实现。