给定合同如:
[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的内容是什么.
您应该有两个单独的方法,它们采用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); }
对于SOAP端点,您应该能够调用任一方法,但是您必须有一个单独的ServiceHost
实例来托管合同的实现.