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

使用不同的绑定在多个应用程序中重用 WCF 服务

starIconstarIconstarIconstarIconstarIcon

5.00/5 (5投票s)

2011年12月21日

CPOL

4分钟阅读

viewsIcon

31836

downloadIcon

780

使用不同的绑定在多个应用程序中重用 WCF 服务

引言

Windows® Communication Foundation 编程允许使用各种线格式和消息协议来配置服务。不同绑定需求因应用程序而异。不同绑定的主要优势是,我们可以为不同的消费者重用相同的服务方法,从而改变绑定。我们将看到如何实现这一点。

现实生活场景

让我们考虑一下,某个组织“ABC”开发了一个 WCF 服务。现在,另一个组织“X”正在开发一个 Silverlight 应用程序,并且它对使用该服务感兴趣。因此,组织“ABC”使用 basicHttp 绑定配置了 WCF 服务,以便在 Silverlight 应用程序中使用。几天后,另一个组织“Y”正在开发一个 ASP.NET Web 应用程序,并且它对使用某些 WS(*) 兼容绑定来使用该服务感兴趣。因此,组织“ABC”在 WCF 服务中引入了 wsHttp 绑定,以满足在 ASP.NET 应用程序中更增强的方式使用它的需求。再次,另一个组织“Z”正在开发一个基于 JAVA 的 Web 应用程序,并且它对以 REST 方式使用该服务感兴趣。他们希望从服务中获取的响应表示不是典型的 XML 格式,而是 JSON 格式。组织还满足了引入新的 webHttp 绑定以 REST 方式使用该服务的需求。

让我们看看如何解决上述场景。为了简单起见,我在一个 Windows Form 客户端中使用了所有三种绑定。但实际上,可能存在在 Silverlight、ASP.NET 或某些基于 JAVA 的 Web 客户端中开发的不同的应用程序。

在同一 WCF 服务中实现不同的绑定

为了实现上述概念,我们将开发一个简单的 WCF 服务项目。WCF 服务有一个单一的方法 GetData()

image001.png

公开 BasicHttp 绑定

打开 web.config 文件并检查 Servicemodel 元素。您将找不到任何已定义的绑定。

image002.png

实际上,如果 config 文件中没有定义绑定,WCF 默认公开 BasicHttp 绑定。一旦您有兴趣公开多个绑定,您需要在 config 文件中明确定义 BasicHttp 绑定。由于我们将在 WCF 服务中引入多个绑定,让我们为该服务定义一个 BasicHttp 绑定,如下所示

image003.png

公开 wsHttp 绑定

为了引入 wsHttp 绑定,请在 web.config 文件中添加一个条目,如下所示

image004.png

因此,一旦我们为我们的服务公开了 wsHttp 绑定,我们的服务就准备好为任何有兴趣使用 wsHttp 绑定使用服务的消费者提供服务。

公开 webHttp 绑定

为了以 REST 方式使用 WCF 服务,首先,我们必须在服务的接口定义中引入一些属性。在 REST 中,我们可以使用 querystring 传递服务方法的参数值并生成 GETPOSTPUTDELETE 请求。在这里,我们的服务将使用 HTTP get 请求调用。此外,我们的响应表示将采用 JSON 格式。打开 IMyService.cs 文件,并使用 WebGet 属性和 UriTemplate 属性标记接口 IMyService,如下所示

image005.png

响应格式可以是 XML 或 JSON。

现在,我们需要引入用于以 REST 方式使用服务的端点。为此,我们必须定义一个具有 webHttp 绑定的端点行为,然后将其用作该绑定的端点行为。为了实现这一点,请修改 web.config 文件,如下所示

image006.png

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

使用服务

添加一个 Windows Form 应用程序项目,并在表单上添加三个按钮。每个按钮单击将使用不同的绑定调用服务。右键单击引用->添加服务引用。单击“发现”或在“地址”框中键入服务 URL。

image007.png

单击“确定”后,将生成存根代码。打开 Form1.cs 并添加以下命名空间

image008.png

在表单按钮中实现以下代码,以便使用 basic http 绑定调用服务

image009.png

服务 URL 中的端口号应在不同的机器之间有所不同。通过右键单击 -> 在浏览器中查看文件 MyService.svc 并检查端口来获取服务 URL。

在表单按钮中实现以下代码,以便使用 wshttp 绑定调用服务

image010.png

我们可以通过多种方式调用 REST WCF 服务,例如使用 HTML 表单中的 get 方法或使用 XMLHttpRequest。在这里,我们使用 WCF 代理来调用它。

添加另外两个引用,如下所示

image011.png

在表单按钮中实现以下代码,以便使用 web 绑定调用服务

image012.png

运行表单应用程序并单击按钮。您将获得服务返回的值。

image013.png image014.png

历史

  • 2011 年 12 月 18 日:初始版本
© . All rights reserved.