1.WCF和之前通信技术的比较
WCF将现有的所有分布式技术统一起来,提供一个统一的应用编程接口。
Remoting不能提供跨平台的支持,仅仅提供服务端和客户端均处于.NET平台下的通信。
为了实现对跨平台的支持,微软在ASP.NET平台上开发出了Web服务。
消息队列,对离线通信方式的支持(当网络无法到达,消息可暂存于本地的消息队列中)
2.服务端配置
先定义服务契约(应用ServiceContractAttribute特性的接口)
创建实现契约的服务
通过EndPoint(Address,Binding,Contract)封装了通信所需要的多有必要信息。
通过特殊的服务行为ServiceMetadataBehavior发布WCF的元数据,客户端通过该服务地址获取WCF服务元数据,从而建立服务的代理类。
同时,WCF服务通过寄宿开启一个进程,宿主使用System.ServiceModel.ServiceHost对象完成对WCF服务的启动。
服务端配置结构如下:
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
包含元数据发布地址
</serviceBehaviors>
</behaviors>
<services>
具体的服务设置,包含对endpoint的定义
</services>
</system.serviceModel>
</configuration>
//服务端伪码
try
{
host = new ServiceHost();
host.opened += fun();
host.open();
}
catch
{
输出提示“端口可能被占用”
}
3.客户端配置
添加服务引用,通过元数据地址,获取服务元数据,从而自动生成服务代理相关代码和相应的配置。
使用 服务名+Client 的类名(服务代理类),完成客户端对服务的调用。
客户端配置结构如下:
<configuration>
<system.serviceModel>
<bindings>
自动生成的绑定信息
</bindings>
<client>
自动生成的客户端信息,包含endpoint
</client>
</system.serviceModel>
</configuration>
//客户端伪码
try
{
client.cmd();
client.close();
}
catch
{
client.abort();
}
4. binding对应不同的通信方案
binding实现了通信的所用细节并且还有对消息进行的相应处理(如传输安全,可靠消息传输,事务等)。
WCF预定了一系列系统绑定,如BasicHttpBinding,WSHttpBinding,WS2007HttpBinding,WSDualHttpBinding,NetTcpBinding,NetNamedPipeBinding和NetMsmqBinding等。
其中以Net为前缀的局限于.NET平台使用(WCF客户端和WCF服务直接进行通信),通信场景主要针对区域网内部。
NetTcpBinding,NetNamedPipeBinding和NetMsmqBinding分别采用TCP,命名管道(Named Pipes)和消息队列(MSMQ)作为底层的传输方式。
其中NetNamedPipeBinding仅限于同台机器上的跨进程通信(Inter-Process Communication,IPC)
以WS为前缀的WSHttpBinding,WS2007HttpBinding实现跨平台支持。
WSDualHttpBinding实现了基于HTTP的双向通信,使服务端回调客户端成为可能。
WCF设置BasicHttpBinding的主要目的在于与之前的.asmx Web服务进行互操作。