首页 > 代码库 > 编程三大核心内容之二:通信

编程三大核心内容之二:通信

WCF是.NET提供的具备高度灵活性的通信管理框架。

image

一.特点

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<异常数据类>

十、绑定

绑定描述了服务的通信方式。包括:传输协议、安全性、编码格式、事务流、可靠性、形状变化、传输升级。

预定义绑定:

image

按功能分:

image

 

十一、消息队列

消息队列是通信任务的重要辅助工具。System.Messaging 空间封装了windows操作系统的消息队列读写功能。

image

编程三大核心内容之二:通信