您可以使用 SOAP 和 WSHttpBinding 对 WCF 服务进行 jQuery 调用吗?

Posted

技术标签:

【中文标题】您可以使用 SOAP 和 WSHttpBinding 对 WCF 服务进行 jQuery 调用吗?【英文标题】:Can you make a jQuery call to WCF service using SOAP and WSHttpBinding? 【发布时间】:2011-06-04 23:04:22 【问题描述】:

我可以使用 SOAP 和 WSHttpBinding 对 WCF 服务进行 JQuery 调用吗?

如果是这样,怎么做? (网上有例子吗?)如果没有,为什么不呢?

正如你从this post 看到的,我无法让它工作。

我需要能够使用 WSHttpBinding,这样我才能支持 SAML 和 WS-Security。据我了解,basicHTTPBinding 不支持 ws-Security。

关于 SO 的所有其他示例都使用 json(我可以轻松地工作)或 basicHttpBinding。

我需要使用 SOAP 和 ws-Security 以符合 OGC 07-118r8 标准。

【问题讨论】:

我认为 jQuery 已经变得如此流行,以至于人们试图在 JS 端做太多服务器端的事情。您需要定义界限并明确区分这两个世界的界限。 你会如何调用 Web 服务然后使用 javascript 【参考方案1】:

有了 WS-* 之类的东西和 WCF 的复杂性,创建一个简单的 jQuery 异步回调到您网站上另一个可以利用 .NET 内置 WS-Security 库的页面不是更容易吗?从那里您可以触发对 WCF 端点的调用,处理结果,并将其作为易于阅读的响应返回给 jQuery 函数。

我发现一些文章提到了您正在尝试做的事情。听起来您基本上必须编写自己的 WS-Security jQuery 库,然后才能直接通过 JavaScript 工作(我想这对您来说可能不切实际):

“使用“wsHttpBinding”绑定公开的服务实现了WS-*系列Web服务规范的WS-Security。由于绑定使用了安全性,请求将被拒绝。在JQuery中不实现WS-Security就无法调用该服务结束。所以,为了调用服务方法,我们必须在安全性上妥协。”

http://www.codeproject.com/Articles/311908/Calling-WCF-service-exposed-with-different-binding

"...wsHttpBinding,它是一种 SOAP 绑定,不能与 AJAX 一起使用。"

http://www.west-wind.com/presentations/jquery/jquerypart2.aspx

【讨论】:

【参考方案2】:

你不可能在 JavaScript 中实现 WS*!

最好的选择是在服务器上创建另一个绑定,并将其公开为基本 HTTP,甚至更好地作为 WCF REST。

【讨论】:

不是一个选项...客户需要通过 WS-* 与我交流,而不是休息。我们必须遵守我的问题中提到的标准。 那么你想在 JavaScript 中实现所有加密吗?好吧,如果可以的话,您可能会变得富有,因为您会开辟很多可能性,但我不知道是否已经完成了这样的事情。 我明白你的意思......所以你说 Javascript 客户端应该调用本地(未加密,但谁在乎,因为它是本地的?)WCF REST Web 服务反过来对远程服务器进行 SAML 身份验证通过 SAML/WCF SOAP?【参考方案3】:

理论上应该是可以的。我暂时假设您已经弄清楚如何获取 SAML 令牌并处理 WS-Security。 WSHttpBinding 默认为soap 1.2,因此要么查看http 绑定规范以了解如何使用jquery 构造请求:http://www.w3.org/TR/soap12-part2/#soapinhttp,要么在WSHttpBinding 上设置EnvelopeVersion.Soap11。祝你好运!

【讨论】:

我还没有弄清楚 SAML 令牌部分。我想我最好先走路再跑。所以我想获得一个基本的服务通信。我是 WCF 的新手,所以我没有设置任何 EnvelopeVersion.Soap11,但我会考虑这样做。谢谢。 我会先弄清楚 SAML/WS-Security 部分,因为它是该方法的更大风险。我个人不确定这是否可行。正如其他一些人所建议的那样,一种更简单的方法是公开另一个特定于 js 消费的 WCF 端点并使用它。

以上是关于您可以使用 SOAP 和 WSHttpBinding 对 WCF 服务进行 jQuery 调用吗?的主要内容,如果未能解决你的问题,请参考以下文章

WireMock中的SOAP附件

WCF 服务的 REST / SOAP 端点

soap协议概述

如何找出安装的 savon(Ruby 的 SOAP 客户端)的版本?

在Node.js SOAP客户端中设置授权

如何区分 SOAP 与 REST 请求?