给定合同如:
[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
实例来承载合同的实现.