我有一个WCF服务,我想根据URI模板生成XML和JSON。所以在我的服务合同中,我有以下方法
[ServiceContract]
public interface MultiFormatContract
{
[OperationContract]
[WebGet(UriTemplate="/json/data", ResponseFormat = WebMessageFormat.Json)]
[JSONPBehavior(callback = "callback")]
public MySerializableObject GetJSONData()
[OperationContract]
[WebGet(UriTemplate = "/xml/data", ResponseFormat=WebMessageFormat.Xml)]
public MySerializableObject GetXMLData()
}
我需要支持JSONP,并使用Microsoft REST示例来支持这一点(遵循此http://jasonkelly.net/archive/2009/02/24/using-jquery-amp-jsonp-for-cross-domain-ajax-with-wcf-services.aspx)。但这意味着我必须添加自定义绑定:
<customBinding>
<binding name="jsonpBinding">
<jsonpMessageEncoding/>
<httpTransport manualAddressing="true"/>
</binding>
</customBinding>
这意味着WCF不再使用textMessageEncoding,即使JSONPEncoder覆盖了文本编码器。我的端点不能再生成Xml。
我不想将消费者锁定为JSON,我希望能够浏览到我的Xml端点以查看Xml以进行调试等。
关于如何兼顾两者的任何想法?
答案 0 :(得分:1)
不是通过使用UriTemplate创建“虚拟”端点来隔离您的响应类型,例如“/ xml / data”,只需使用适当的绑定定义多个端点。您可以使用单个方法并将所有属性放在一个方法上。
e.g。
<endpoint address="json"....
<endpoint address="jsonp"....
<endpoint address="xml" ....