我有一个返回JSON的Web服务,但现在我想修改它以允许调用者指定一个回调函数,所以返回从:JSON DATA到specifiedFunction(JSON DATA);我现在返回JSON的方式就是返回一个对象的实例并让.NET执行其序列化魔术,如果我改为只返回一个字符串我可以添加函数的名称和数据的括号但是然后我在回报中最终得到引号,因为它是一个字符串,我不想要那些。那我怎么能去做呢?
原因是我们希望开发人员调用我们的API,以便能够使用动态脚本标记,如此处所述http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html
答案 0 :(得分:5)
您所追求的技术称为JSONP(带填充的JSON)。
请参阅How to support JSONP in WCF services:
JsonPEncoder
是一个包装编码器 在WCF JSON编码器上。它代表 大多数调用包装编码器。该 已有WriteMesage
个方法 覆盖以填充传出消息 使用回调方法。该JsonBehavior
用于服务 用于启用JSONP编码的操作 那个操作。查询参数 保存回调的URI 函数名称指定为 行为的CallBack
属性。
答案 1 :(得分:5)
在WCF 4.0中添加了对JSONP的支持。你可以使用
<bindings>
<webHttpBinding>
<binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
</webHttpBinding>
</bindings>
http://bendewey.wordpress.com/2009/11/24/using-jsonp-with-wcf-and-jquery/
答案 2 :(得分:1)
我不知道他们使用的是什么版本的HTML,但在我使用过的所有版本中,脚本标记中的src属性必须是一个URL。他们在某种程度上使用了一个函数,我认为它没有工作。
您是否真的看到过动态脚本代码?
答案 3 :(得分:1)
我知道这是一个旧线程,但似乎每个人都坚持要改变WCF以支持JSONP,而这显然不是海报所要求的。我发布了这里和forums.asp.net,没有人花时间回复。
我最终将其作为流返回。这会导致使用“原始”模式,WCF不会触及响应。链接:http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx。