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

nic*_*rom 9 rest wcf json

给定合同如:

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

有没有办法让服务在请求时以json响应:/GetData/1234.json,xml当被请求为/GetData/1234.xml时仍然可以作为一个其他网址的正确肥皂服务,强烈键入wsdl合同?

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

cas*_*One 12

应该有两个单独的方法,它们采用id和格式(并且它们将调用返回的共享实现ResponseData)具有不同的WebGet属性:

[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);
}
Run Code Online (Sandbox Code Playgroud)

对于SOAP端点,您应该能够调用任一方法,但是您必须有一个单独的ServiceHost实例来托管合同的实现.