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


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

    image

    wcf使用OData(开放式数据协议)创建数据服务,将数据通过URI公开,允许使用REST(具象状态传输)来访问及更改数据,即标准HTTP动词GET、PUT、POST和DELETE操作。OData定义了Atom、JSON、XML格式等发布协议。

    image

    〇、概述

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

    十、绑定

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

    预定义绑定:

    image

    按功能分:

    image

     

    十一、消息队列

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

    image

  • 相关阅读:
    Jmeter跨线程组传参
    HTTP2 Sampler for JMeter
    全功能Python测试框架:pytest
    pytest + allure + jenkins 生成漂亮的测试报告
    C/C++ 多线程注意事项
    ASIO
    cocos2D-X 线程注意事项
    C/C++ C++ 11 兰姆达
    Android Studio 打包生成正式apk(XXX-release.apk)的两种方式
    C/C++ C++ 11 std::move()
  • 原文地址:https://www.cnblogs.com/Nobel/p/4155456.html
Copyright © 2020-2023  润新知