WCF是.NET提供的具备高度灵活性的通信管理框架。
一.特点
1.灵活的服务端支持: asp.net、windows服务、com+进程、windows窗体等。
2.编程方便:不需要共同基类。
3.信道可选:http、tcp、ipc、自定义信道。
4.安全:支持wse 3.0标准。
5.扩展性:soap注入。
6.集成性:支持dcom和asp.net web服务的集成。
二、核心服务
1.SOAP 简单对象访问协议
2.WSDL Web服务描述语言
3.REST 代表性状态传输
4.JSON JavaScript对象标记
三、自定义服务宿主
1.继承自System.ServiceModel.ServiceHost
2. 实例.Open() 启动监听器信道
3.实例.Close() 关闭服务
4. 用WCF Service Configuration Editor 工具编辑 WCF配置文件
四、客户端
1.添加一个服务引用(服务使用了mexHttpBinding 绑定MEX端点)
2.添加System.Runtime.Serialization、System.ServiceModel 程序集引用,和绑定信息与端点的配置文件
3.生成代理类,和实体类,该实体类包含[DataMember]标注的元素
五、诊断
可使用Service Configuration Editor工具配置。用Service Trace Viewer(svctraceviewer.exe)工具查看跟踪文件。
六、协定
1.数据协定[DataMember] : .Name字段名 .Order 序列化顺序 .IsRequired 可选性 .EmitDefaultValue 默认值是否序列化
2.数据版本[DataContract]: .Namespace xml命名空间 (删除字段和添加必要字段应修改命名空间来区分不同版本)
3.服务协定[ServiceContract]:标注服务接口 .ConfigurationName 服务配置名 .CallbackContract 双工通信客户端 .Name <portType>的名字 .Namespce <portType>的名称空间 .SessionMode 会话类型 .ProtectionLevel 保护通信类型
4.操作协定[OperationContract]: .Action 请求链接,默认是xml名称空间、协定名、操作名和响应类型(Response结尾)的组合 .ReplyAction 回应链接 .AsyncPattern 异步链接 .IsInitiating 初始会话 .IsTeminating 结束会话 .IsOneWay 无响应操作 .Name 操作名 .ProtectionLevel 安全类型
5.传输协定:[DeliveryRequirements]、[RequireOrderedDelivery]、[QueuedDeliveryRequirements]
6.消息协定:[MessageContract]、[MessageHeader]、[MessageBodyMember]
七、实现服务
1.[ServiceBehavior]标注实现类:
.TransactionAutoCompleteOnSessionClose 会话类型 .TransactionIsolationLevel 事务隔离级别 .ReleaseServiceInstanceOnTransactionComplete 会话完成时 .AutomaticSessionShutdown 会话关闭 .InstanceContexMode 对象状态 .ConcurrencyMode 并发 .UseSynchronizationContext 窗口线程 .IncludeExceptionDetailInFaults 异常处理 .MaxItemsInObjectGraph 序列化对象的数目 .ValidateMustUnderstand 理解标题
2.实现服务接口
3.[OperationBehavior] :
.AutoDisposeParameters 参数自动释放 .Impersonation 调用者身份运行 .ReleaseInstanceMode 生命周期 .TransactionScopeRequired 事务 .TransactionAutoComplete 自动完成事务
八、编程实现客户端
1.ChannelFactory类例子:
var binding = new WSHttpBinding();
var address = new EndpointAddress(链接);
var factory = new ChannelFactory<I服务>(binding, address);
I服务 channel = factory.CreateChannel();
factory.Close();
2.visual studio 添加服务引用
3.ServiceModel 元数据实用工具(Svcutil.exe) 产生代理类:
var client = new XXServiceClient();
client.RegisterForCourse(…);
client.Close();
4.双工通信
必须在客户端中实现指定协定接口。
服务器端:
public interface IMyMessageCallback{
[OperationContract(IsOneWay=true)]
void OnCallback(string message);}
[ServiceContract(CallbackContract=typeof(IMyMessageCallback))]
public interface IMyMessage{
[OperationContract]
void MessageToServer(string message);}
客户端:
class ClientCallback: IMyMessageCallback{
public void OnCallback(string message){}}
九、异常处理
1.[FaultContract] 标注操作关联的异常数据类
2.抛出FaultException<异常数据类>
十、绑定
绑定描述了服务的通信方式。包括:传输协议、安全性、编码格式、事务流、可靠性、形状变化、传输升级。
预定义绑定:
按功能分:
十一、消息队列
消息队列是通信任务的重要辅助工具。System.Messaging 空间封装了windows操作系统的消息队列读写功能。