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]
.TransactionAutoCompleteOnSessionClose 会话类型 .TransactionIsolationLevel 事务隔离级别 .ReleaseServiceInstanceOnTransactionComplete 会话完成时 .AutomaticSessionShutdown 会话关闭 .InstanceContexMode 对象状态 .ConcurrencyMode 并发 .UseSynchronizationContext 窗口线程 .IncludeExceptionDetailInFaults 异常处理 .MaxItemsInObjectGraph 序列化对象的数目 .ValidateMustUnderstand 理解标题
.AutoDisposeParameters 参数自动释放 .Impersonation 调用者身份运行 .ReleaseInstanceMode 生命周期 .TransactionScopeRequired 事务 .TransactionAutoComplete 自动完成事务
var binding = new WSHttpBinding();
var address = new EndpointAddress(链接);
var factory = new ChannelFactory<I服务>(binding, address);
I服务 channel = factory.CreateChannel();
factory.Close();
var client = new XXServiceClient();
client.RegisterForCourse(…);
client.Close();
必须在客户端中实现指定协定接口。
服务器端:
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操作系统的消息队列读写功能。