WCF 中wsHttpBinding配置实例程序

WCF 中wsHttpBinding配置实例程序

    这两天接触到WCF技术,觉得有必要对一些遇到过的不大清楚的问题进行记录。既为方便后面自己对相关问题的查漏补缺,也希望能够有需要的人提供一点帮助。

 

1 介绍

介绍了WCF程序中使用地址绑定的wsHttpBinding方式实例。

2 背景

在WCF技术中,WCF Service在服务器端发布之后,客户端client链接服务器进行服务接口调用有以下四种方式:

  • HTTP:常见的http方式连接,类似于网站传输方式;
  • TCP:使用TCP协议实现本地网络与远程服务器之间的链接,比HTTP方式高效,支持安全控制;
  • Name Pipe:命名管道技术,是用于在本机的不同进程之间的通信;
  • MSMQ:(Microsoft Message Queue,微软消息队列),一种可靠消息排队技术,允许应用程序发送的消息通过队列路由到达目的地。

WCF 中wsHttpBinding配置实例程序

Figure 1 WCF Service与Client的连接通信方式[1]

图1显示了WCF Service在服务端与各Client的通信连接方式。

[1] 引自《Beginning Visual C# 2010》,Chatper 26, page 902.

3 代码

    在Visual Studio 2010下创建。

首先,第一个例子是使用wsHttpBinding,然后使用控制台Console应用程序作为Host及Client,其工程结构图如下:

WCF 中wsHttpBinding配置实例程序

Step 1:建立WCF Service Library工程,WcfSericeLib,VS会自动生成接口文件IService1.cs及类实现文件Service1.cs。

Step 2: 分别创建Console Application工程ConsoleHost和ConsoleClient。

在App.config文件中,我们可以看到以下配置:

WCF 中wsHttpBinding配置实例程序

从中我们可以看到,其实这里默认使用了wsHttpBinding,此时程序是可以编译运行的。但是本程序演示的目的是将WCF Service寄宿到ConsoleHost中,让ConsoleHost启动服务,然后通过ConsoleClient调用已启用的服务。

Step 3:将WcfServiceLib中的App.config文件剪切到ConsoleHost中,并在ConsoleHost中引入WcfServiceLib.dll.

WCF 中wsHttpBinding配置实例程序

Step 4: ConsoleHost中加入System.ServiceModel库,更改Program.cs文件如下:

WCF 中wsHttpBinding配置实例程序

这时,将ConsoleHost设为启动项目,就能将Service服务启动成功。

Step 5:先在ConsoleHost工程Debug目录下将ConsoleHost.exe运行,能够看到Service1 Started的启动信息。 然后在ConsoleClient中Add Service Reference,将ConsoleHost中App.config中的baseAddress复制到地址栏中,可以查找到当前Service。如下图所示:

WCF 中wsHttpBinding配置实例程序

上述步骤完成后,在ConsoleClient中会自动生成app.config的配置文件,具体见代码。

Step 6:更改ConsoleClient program.cs,如下:

WCF 中wsHttpBinding配置实例程序

最后,先运行ConsoleHost.exe启动Service的情况下,再运行ConsoleClient.exe,可得到如下结果:

WCF 中wsHttpBinding配置实例程序

至此,该示例完成。

整个工程源代码下载:WCFDemo_wsHttpBinding.zip

4 讨论

    本例中,只是将WCF Application Library中的服务Handle到Console中,这样的话,ConsoleHost可为远程服务器,ConsoClient可为各不同地域的客户机。

5 版权

    在注明出处的情况下,可自由进行复制传播。

    参考文献:

    《Beginning Visual C# 2010》

    http://blog.csdn.net/fangxing80/article/details/6106228

6 关于作者

Ray Lei,正处于积累学习阶段的C++/C#、移动平台开发者。

你可能感兴趣的:(http)