65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.84/5 (15投票s)

2012 年 1 月 10 日

CPOL

5分钟阅读

viewsIcon

111542

downloadIcon

4727

本文说明了如何从 JQuery 调用公开了不同绑定的 Windows Communication Foundation 服务。

引言

本文说明了如何从 JQuery 调用公开了不同绑定的 Windows Communication Foundation 服务。在这里,我们将使用三种不同的绑定(webHttpBindingbasicHttpBindingwsHttpBinding)公开一个 WCF 服务,并使用 JQuery 在客户端应用程序中对其进行消费。

实现具有不同绑定的 WCF 服务

首先,让我们创建一个 WCF 服务,它公开三个具有不同绑定的不同终结点。该服务包含一个名为 GetData() 的方法。请参阅我之前的文章 使用不同绑定在多个应用程序中重用 WCF 服务,以了解使用不同绑定创建 WCF 服务的步骤。

服务的最终接口定义如下:

image001.gif

服务实现如下

image002.gif

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

image003.gif

完成 WCF 服务开发后,在 MyService.svc 文件上右键单击 -> 在浏览器中查看,以检查 WCF 服务生成的 WSDL。

在 JQuery 中消费公开的 webHttpBinding 服务

这是 WCF 服务中最适合 JQuery 消费的绑定。创建一个新的空 ASP.NET 项目,并添加一个 WebForm Webpage.aspx。在窗体上放置三个 HTML 按钮。

image004.gif

image005.gif

现在,在 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 中,我们可以使用查询字符串传递服务方法的参数值,并生成 GETPOSTPUTDELETE 请求。在这里,我们的服务将使用 HTTP get 请求进行调用。要从 JQuery 消费服务,可以使用库的 JQuery.ajax() 方法。

image006.gif

上面的代码向服务发送一个请求,并在调用中设置不同的值。

通过在 MyService.svc 文件上右键单击 -> 在浏览器中查看来获取服务 URL,并在调用服务时检查端口。示例中的端口可能与您的本地实现不匹配。

运行 Web 应用程序,然后单击“使用 JQuery 调用 REST WCF”按钮。您将获得服务返回的值。

image007.gif

在 JQuery 中消费公开的 basicHttpBinding 服务

现在,让我们尝试调用使用“basicHttpBinding”公开的服务方法。为此,我们需要为服务的“basicHttp”终结点构建一个 SOAP 请求。我们需要像 WCF 客户端一样精确地格式化请求。我们将借助 WCF 测试客户端来生成请求。

转到 WCF 服务项目,选择 MyService.svc 文件并按 F5。在 WCF 测试客户端中,选择“basisHttp”终结点公开的 GetData 方法,并为请求设置一个值。选择 XML 标签以查找格式化的 SOAP 请求。从请求中复制选定的部分。

image008.gif

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

image009.gif

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

image010.gif

在请求成功返回后,解析响应 XML 并显示输出。要了解响应 XML,请从 **WCF 测试客户端** 调用该方法并检查响应 XML。

运行 Web 应用程序,然后单击“使用 JQuery 调用 BasicHttp 绑定的 WCF”按钮。您将获得服务返回的值。

image011.gif

在 JQuery 中消费公开的 wsHttpBinding 服务

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

公开非安全的“wsHttp”终结点

image012.gif

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

image013.gif

现在我们将从 JQuery 访问此新终结点。在从 **WCF 测试客户端** 访问终结点后,构造 SOAP 请求。我们需要从 JQuery POST 此请求。

使用包含终结点寻址信息的“To”头来修改 SOAP 请求。

由于“wsHttpBinding”使用 SOAP 1.2,我们需要在调用代码中将内容类型修改为“application/soap+xml”。JQuery 中的以下代码将 SOAP 请求 POST 到通过“wsHttpbinding”公开的服务。

image014.gif

在请求成功返回后,解析响应 XML 并显示输出。为了在解析响应 XML 时了解元素,请从 **WCF 测试客户端** 调用该方法并检查响应 XML。

运行 Web 应用程序,然后单击“使用 JQuery 调用 WsHttp 绑定的 WCF”按钮。您将获得服务返回的值。

image015.gif
© . All rights reserved.