给定一个契约(Contract),例如:
[ServiceContract] public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "GetData/{id}.{format}")]
ResponseData GetData(string id, string format);
}
有没有一种方法可以让服务在被请求时以json响应:
/GetData/1234.json,以/GetData/1234.xml的身份被请求时,仍然可以通过强类型的wsdl契约(Contract)在其他网址作为适当的肥皂服务使用xml?
使用Stream作为GetData的返回值是不可行的,尽管它满足了前两个要求,但是wcf无法创建完整的wsdl规范,因为它不知道生成的Stream的内容是什么。
最佳答案
您应该有两个采用id和format的单独方法(它们将调用一个返回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
实例来托管契约(Contract)的实现。