WCF是.NET提供的具备高度灵活性的通信管理框架。
wcf使用OData(开放式数据协议)创建数据服务,将数据通过URI公开,允许使用REST(具象状态传输)来访问及更改数据,即标准HTTP动词GET、PUT、POST和DELETE操作。OData定义了Atom、JSON、XML格式等发布协议。
〇、概述
1.定义数据模型
1.1 ADO.NET 实体框架
1.2 基于CLR对象的数据模型,该模型返回IQueryable<T>接口,须实现IUpdatable来实现创建、更新、删除操作。
1.3 自定义数据提供程序
1.3.1 元数据提供程序 IDataServiceMetadataProvider
1.3.2 查询提供程序 IDataServiceQueryProvider
1.3.3 更新提供程序 IDataServiceUpdateProvider
1.3.4 分页提供程序 IDataServicePagingProvider
1.3.5 流提供程序 IDataServiceStreamProvider
2.创建数据服务
从DataService<T>类继承,T为实体容器
3.配置数据服务
DataServiceConfiguration 配置对资源和服务操作的访问。
4.访问数据服务资源
4.1通过URI访问
例:协议+命名空间+实体+键+属性|关联+/$value|?$filter=XXX
4.2 HTTP操作:HTTP GET 、HTTP POST、HTTP DELETE、HTTP PUT、HTTP MERGE
4.3 http put, post, merge请求发送实体数据的格式:Atom、JSON
4.4 客户端库类DataServiceContext和DataServiceQuery<T>将Atom、JSON等消息转换为代表实体数据的CLR对象。
5.客户端库类
DataServiceContext 封装针对指定数据服务支持的操作(可保持上下文):
.Credentials 可指定发送凭据
.SendingReuest 发送请求前事件
.AddRelatedObject 添加实体,并在两个相关实体对象之间创建新的链接
.AddLink 创建链接
.SetLink 更新链接(0..1:1、1:1)
.DeleteLink 删除链接
.AttachLink 附加链接
.DetachLink 终止链接(*:*)
.AddObjcet 在上下问中添加项
.AttachTo 添加一个已在数据库中的对象而无需查询
.UpdateObject 标记已更新对象
.DeleteObject 标记已删除对象
.SaveChanges 提交更改
DataServiceQuery<T>表示一个针对特定实体集的查询:
.AddQueryOption (String,Object)添加一个查询选项。
.Execute() 执行查询,返回IEnumerable<T>源,可前置转换为QueryOperationResponse<T>对象
.IncludeTotalCount 实体集中实体的总数
.Expand 预加载相关实体
.LoadProperty 显式加载相关实体
QueryOperationResponse 包含:
.Error 操作引发的错误
.Headers 与查询响应关联的HTTP响应表头的集合
.Query 生成结果对应的DataServiceQuery<T>
.StatusCode 查询响应的HTTP响应代码
.TotalCount 实体集总数
.GetContinuation 返回一个DataServiceQueryContinuation<T>对象,包含下一页结果的URI
一.特点
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操作系统的消息队列读写功能。