从 WCF REST Web 服务返回包装在回调函数中的 JSON

Posted

技术标签:

【中文标题】从 WCF REST Web 服务返回包装在回调函数中的 JSON【英文标题】:Return JSON wrapped in a callback function from a WCF REST web service 【发布时间】:2010-11-13 19:08:59 【问题描述】:

我有一个返回 JSON 的 Web 服务,但现在我想修改它以允许调用者指定回调函数,以便返回从:JSON DATA 到 specifiedFunction(JSON DATA);我现在返回 JSON 的方式就是返回一个对象的实例并让 .NET 执行它的序列化魔法,如果我更改为只返回一个字符串,我可以添加函数的名称和数据周围的括号,但是然后我在返回中加上引号,因为它是一个字符串,我不想要那些。那我该怎么办呢?

这样做的原因是我们希望调用我们的 API 的开发人员能够使用动态脚本标记,如此处所述http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html

【问题讨论】:

【参考方案1】:

我知道这是一个旧线程,但似乎每个人都坚持更改 WCF 以支持 JSONP,而这显然不是发帖人所要求的。我在这里和forums.asp.net 发帖,没有人花时间回复。

我最终将它作为流返回。这会导致使用“原始”模式,并且 WCF 不会触及响应。链接:http://blogs.msdn.com/b/carlosfigueira/archive/2008/04/17/wcf-raw-programming-model-web.aspx.

【讨论】:

我从昨天早上开始就一直在研究这个问题!!你和卡洛斯的博文救了我的后腿!非常感谢!!【参考方案2】:

在 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/

【讨论】:

【参考方案3】:

您所追求的技术称为JSONP(带有填充的JSON)。

见How to support JSONP in WCF services:

JsonPEncoder 是一个包装编码器 在 WCF JSON 编码器上。它代表 大多数对包装编码器的调用。这 WriteMesage 方法已经 覆盖以填充传出消息 使用回调方法。这 JsonBehavior 用于服务 启用 JSONP 编码的操作 那个操作。查询参数 保存回调的 URI 函数名被指定为 CallBack 行为的属性。

【讨论】:

哇。我听说过 JSONP,但不知道它发送了回调函数名称。浏览器支持该 src=expression 语法的任何链接?【参考方案4】:

我不知道他们使用的是什么版本的 HTML,但在我使用的所有版本中,脚本标记中的 src 属性必须是 URL。他们以某种方式使用了一个函数,但我认为它不起作用。

你真的见过动态脚本标签的工作原理吗?

【讨论】:

我个人没有使用过,但据我所知可以做到。有一些 Web 服务示例以我所追求的风格返回,例如 geonames.org/export/JSON-webservices.html 我并不关心这些服务,因为我是浏览器。更新的人可以纠正我,但我不希望在 src 属性中使用 URL 以外的任何东西。 无论如何,任何有关如何根据需要格式化返回的帮助将不胜感激:)

以上是关于从 WCF REST Web 服务返回包装在回调函数中的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

使用 KissXML 处理 wcf Rest Web 服务 - 我应该如何处理命名空间问题

从 IParameterInspector AfterCall 可以处理的 WCF Rest 服务返回带有消息的 HttpStatus 代码

将 WCF 转换为 WEB API:在 WEB API 中使用包装器重用 WCF 服务是个好主意吗?

Angular 4 POST 到 WCF REST 服务返回 NULL 响应

我应该通过 ASP.NET MVC 操作还是 WCF 公开 Web 方法?

WCF、Web API、WCF REST 和 Web 服务之间的区别?