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





5.00/5 (5投票s)
使用不同的绑定在多个应用程序中重用 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()
。

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

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

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

因此,一旦我们为我们的服务公开了 wsHttp
绑定,我们的服务就准备好为任何有兴趣使用 wsHttp
绑定使用服务的消费者提供服务。
公开 webHttp 绑定
为了以 REST 方式使用 WCF 服务,首先,我们必须在服务的接口定义中引入一些属性。在 REST 中,我们可以使用 querystring
传递服务方法的参数值并生成 GET
、POST
、PUT
、DELETE
请求。在这里,我们的服务将使用 HTTP get
请求调用。此外,我们的响应表示将采用 JSON 格式。打开 IMyService.cs 文件,并使用 WebGet
属性和 UriTemplate
属性标记接口 IMyService
,如下所示

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

右键单击 -> 在浏览器中查看文件 MyService.svc 以检查 WCF 服务生成的 WSDL。
使用服务
添加一个 Windows Form 应用程序项目,并在表单上添加三个按钮。每个按钮单击将使用不同的绑定调用服务。右键单击引用->添加服务引用。单击“发现”或在“地址”框中键入服务 URL。

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

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

服务 URL 中的端口号应在不同的机器之间有所不同。通过右键单击 -> 在浏览器中查看文件 MyService.svc 并检查端口来获取服务 URL。
在表单按钮中实现以下代码,以便使用 wshttp
绑定调用服务

我们可以通过多种方式调用 REST WCF 服务,例如使用 HTML 表单中的 get
方法或使用 XMLHttpRequest
。在这里,我们使用 WCF 代理来调用它。
添加另外两个引用,如下所示

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

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


历史
- 2011 年 12 月 18 日:初始版本