wcf学习总结《上》
在最近快一个月的时间里我重新系统地学习了wcf,结合着IIS项目和自己写的一些小测试对wcf原理理解又加深了一层。在这里希望与大家分享一下我的wcf学习总结。下面我主要从这几个方面:wcf概述、服务端契约、服务端宿主、服务端配置、客户端配置、数字证书来讲解分析。这次先讲解,wcf概述、服务端契约、服务端宿主、服务端配置。
Wcf概述
Wcf(Windows Communication Foundation)是Microsoft为构建面向服务的应用程序而提供的统一编程模型,它整合.NET平台下所有和分布式系统有关的技术。Wcf本质是面向服务的主要分为服务端和客户端两部分。服务端和客户端进行通信的过程如下图所示:
服务端契约
契约定义了服务提供的功能和客户端可以使用的功能。契约可以完全独立于服务的实现代码。有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,如需转载请自行联系原作者