本文共 2576 字,大约阅读时间需要 8 分钟。
在最近快一个月的时间里我重新系统地学习了wcf,结合着IIS项目和自己写的一些小测试对wcf原理理解又加深了一层。在这里希望与大家分享一下我的wcf学习总结。下面我主要从这几个方面:wcf概述、服务端契约、服务端宿主、服务端配置、客户端配置、数字证书来讲解分析。这次先讲解,wcf概述、服务端契约、服务端宿主、服务端配置。
Wcf概述
Wcf(Windows Communication Foundation)是Microsoft为构建面向服务的应用程序而提供的统一编程模型,它整合.NET平台下所有和分布式系统有关的技术。Wcf本质是面向服务的主要分为服务端和客户端两部分。服务端和客户端进行通信的过程如下图所示:
上图中,主机进程就是服务端,在其中需要创建服务,然后将服务通过(终结点)与客户端进行通信。客户端在使用服务时,需要首先创建一个代理服务,然后调用这个代理服务。EndPoint(终结点)在wcf中是非常重要的部分。它包含了服务地址(Address)、绑定格式(Bimding)和契约(Contract)。其中,地址定义了服务位置,绑定定义了服务通信方式,契约定义了服务所提供的功能。详细说来就是,wcf服务最终目标是通过进程或不同系统、通过本地网络或通过Internet收发客户和服务之间的消息。如果需要以独立于平台的方式尽快收到消息,就应这么做。服务提供一个端点,它用契约、绑定和地址来描述。契约定义了服务提供的操作,绑定给定了协议和编码信息,地址是服务的位置。客户需要一个兼容的端点访问服务。客户调用代理上的一个方法。代理提供了服务定义的方法,但把方法调用转换为一条消息,并把该消息传输到信道上。信道有一个客户端和一个服务端,它们通过一个网络协议来通信。在信道上,把消息传递给调度程序,调度程序再把消息转换为服务调用的方法调用。
服务端契约
契约定义了服务提供的功能和客户端可以使用的功能。契约可以完全独立于服务的实现代码。有wcf定义的契约可以分为3种不同的类型:数据契约、服务契约和消息契约。契约可以用.NET属性来指定:
○数据契约:数据契约定义了从服务中可以接受和返回的数据。用于收发消息的类关联了数据契约属性。
○服务契约:服务契约用于定义描述了服务的WSDL。这个契约用接口或类定义。
○消息契约:如果需要完全控制SOAP消息,消息契约就可以指定应放在SOAP标题中的数据以及放在SOAP正文中的数据。
我们IIS项目中主要用了服务契约,主要定义了IFTPService.cs、IServerService.cs、IWebsiteService.cs三方面的服务契约,它们都是接口类型,而FTPService.cs、ServerService.cs、WebsiteService.cs分别是这三方面的服务实现类。
服务端宿主
使用WCF可以在任意宿主上运行服务。可以为对等服务创建一个Windows窗体或WPF应用程序,或创建一个Windows服务,或用WAS存放该服务。控制台也适合于演示简单的主机。而我们IIS项目是运用Windows服务作为宿主,与原先项目运用webservice技术有更好的优点,服务端运用Windows服务作为宿主后可以摆脱对计算机IIS的依赖,客户端没有安装iis时,同样可以在客户端对一些服务器、ftp做操控。如下图IIS项目刚开始做服务的项目:
服务端配置
服务端的配置文件非常重要,尤其是端点的配置,我们IIS项目的配置文件如下图所示(service节点中定义了地址、绑定、契约):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <services> <service name= "IISCompanion.WCFService.ServerService" behaviorConfiguration= "httpBehavior" > <endpoint address= "http://218.196.204.59:8091/ServerService" binding= "wsHttpBinding" contract= "IISCompanion.WCFService.IServerService" bindingConfiguration= "httpBinding" > <identity> <dns value= "IISCompanionWCFCert" /> </identity> </endpoint> </service> <service name= "IISCompanion.WCFService.WebSiteService" behaviorConfiguration= "httpBehavior" > <endpoint address= "http://218.196.204.59:8091/WebSiteService" binding= "wsHttpBinding" contract= "IISCompanion.WCFService.IWebSiteService" bindingConfiguration= "httpBinding" > <identity> <dns value= "IISCompanionWCFCert" /> </identity> </endpoint> </service> <service name= "IISCompanion.WCFService.FTPService" behaviorConfiguration= "httpBehavior" > <endpoint address= "http://218.196.204.59:8091/FTPService" binding= "wsHttpBinding" contract= "IISCompanion.WCFService.IFTPService" bindingConfiguration= "httpBinding" > |
本文转自HDDevTeam 51CTO博客,原文链接:http://blog.51cto.com/hddev/1218445,如需转载请自行联系原作者