使用 JQuery 调用暴露为不同绑定的 WCF 服务






4.84/5 (15投票s)
本文说明了如何从 JQuery 调用公开了不同绑定的 Windows Communication Foundation 服务。
引言
本文说明了如何从 JQuery 调用公开了不同绑定的 Windows Communication Foundation 服务。在这里,我们将使用三种不同的绑定(webHttpBinding
、basicHttpBinding
和 wsHttpBinding
)公开一个 WCF 服务,并使用 JQuery 在客户端应用程序中对其进行消费。
实现具有不同绑定的 WCF 服务
首先,让我们创建一个 WCF 服务,它公开三个具有不同绑定的不同终结点。该服务包含一个名为 GetData()
的方法。请参阅我之前的文章 使用不同绑定在多个应用程序中重用 WCF 服务,以了解使用不同绑定创建 WCF 服务的步骤。
服务的最终接口定义如下:

服务实现如下

公开不同绑定的 web.config 文件如下:

完成 WCF 服务开发后,在 MyService.svc 文件上右键单击 -> 在浏览器中查看,以检查 WCF 服务生成的 WSDL。
在 JQuery 中消费公开的 webHttpBinding 服务
这是 WCF 服务中最适合 JQuery 消费的绑定。创建一个新的空 ASP.NET 项目,并添加一个 WebForm Webpage.aspx。在窗体上放置三个 HTML 按钮。

现在,在 JQuery 中实现客户端代码。首先包含 JQuery 库。可以通过访问 Microsoft CDN 来链接该库。您也可以在项目中创建一个“Script”文件夹,并将 jquery-1.5.1.min.js 文件物理存储在其中。
<script type="text/javascript"
src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.min.js"></script>
在脚本中添加以下行,以避免在访问 Microsoft CDN 的 JQuery 文件时出现跨站点传输错误。
//For avoiding "No- Transport" error
//force cross-site scripting (as of jQuery 1.5)
jQuery.support.cors = true;
现在,使用 JQuery 脚本以 RESTful 方式调用服务方法。在 REST 中,我们可以使用查询字符串传递服务方法的参数值,并生成 GET
、POST
、PUT
、DELETE
请求。在这里,我们的服务将使用 HTTP get
请求进行调用。要从 JQuery 消费服务,可以使用库的 JQuery.ajax()
方法。

上面的代码向服务发送一个请求,并在调用中设置不同的值。
通过在 MyService.svc 文件上右键单击 -> 在浏览器中查看来获取服务 URL,并在调用服务时检查端口。示例中的端口可能与您的本地实现不匹配。
运行 Web 应用程序,然后单击“使用 JQuery 调用 REST WCF”按钮。您将获得服务返回的值。

在 JQuery 中消费公开的 basicHttpBinding 服务
现在,让我们尝试调用使用“basicHttpBinding
”公开的服务方法。为此,我们需要为服务的“basicHttp
”终结点构建一个 SOAP 请求。我们需要像 WCF 客户端一样精确地格式化请求。我们将借助 WCF 测试客户端来生成请求。
转到 WCF 服务项目,选择 MyService.svc 文件并按 F5。在 WCF 测试客户端中,选择“basisHttp
”终结点公开的 GetData
方法,并为请求设置一个值。选择 XML 标签以查找格式化的 SOAP 请求。从请求中复制选定的部分。

我们将从 JQuery 代码中 POST 此 SOAP 请求。为此,我们需要在 JQuery 代码中构建复制的请求。

此外,对于 BasicHttpBinding
请求,需要使用 beforeSend
函数在 HTTP 请求中设置 SOAPAction
头。这将定义哪个操作应该接收消息。SOAPAction
头可以在 WCF 服务生成的 WSDL 中找到。JQuery 中的以下代码将 SOAP 请求 POST 到通过“basicHttpbinding
”公开的服务。

在请求成功返回后,解析响应 XML 并显示输出。要了解响应 XML,请从 **WCF 测试客户端** 调用该方法并检查响应 XML。
运行 Web 应用程序,然后单击“使用 JQuery 调用 BasicHttp 绑定的 WCF”按钮。您将获得服务返回的值。

在 JQuery 中消费公开的 wsHttpBinding 服务
我们可以像上面一样调用使用“wsHttpBinding
”绑定公开的服务方法(只需发送 WCF 测试客户端为 wsHttpBinding
终结点生成的 SOAP 请求)。但有一个主要问题。使用“wsHttpBinding
”绑定的服务实现了 WS-* Web 服务规范的 WS-Security。由于绑定使用了安全措施,因此请求将被拒绝。不实现 JQuery 端 WS-Security 就无法调用该服务。因此,为了调用服务方法,我们必须在安全方面做出妥协。现在,如果已有一个服务,我们就不能在 WCF 服务端禁用安全措施,因为这会影响现有用户。为此,我们可以专门为 JQuery 消费公开一个新的非安全“wsHttp
”终结点。
公开非安全的“wsHttp”终结点

要公开一个非安全的终结点,我们需要将“wsHttpbinding
”自定义为“security mode”为“none”,并在新的终结点中使用它。

现在我们将从 JQuery 访问此新终结点。在从 **WCF 测试客户端** 访问终结点后,构造 SOAP 请求。我们需要从 JQuery POST 此请求。
使用包含终结点寻址信息的“To”头来修改 SOAP 请求。
由于“wsHttpBinding
”使用 SOAP 1.2,我们需要在调用代码中将内容类型修改为“application/soap+xml
”。JQuery 中的以下代码将 SOAP 请求 POST 到通过“wsHttpbinding
”公开的服务。

在请求成功返回后,解析响应 XML 并显示输出。为了在解析响应 XML 时了解元素,请从 **WCF 测试客户端** 调用该方法并检查响应 XML。
运行 Web 应用程序,然后单击“使用 JQuery 调用 WsHttp 绑定的 WCF”按钮。您将获得服务返回的值。
