WCF绑定细节(2)——绑定,绑定元素-阿里云开发者社区

开发者社区> 厅一一> 正文

WCF绑定细节(2)——绑定,绑定元素

简介: 绑定这块引出了很多细节。绑定解决了消息交换中的传输协议,传输,编码等问题。如果要公开WCF服务,就要公开终结点Endpoint,WCF服务信息交换就是Endpoint之间的信息交换。终结点三大元素:ABC。
+关注继续查看

绑定这块引出了很多细节。绑定解决了消息交换中的传输协议,传输,编码等问题。如果要公开WCF服务,就要公开终结点EndpointWCF服务信息交换就是Endpoint之间的信息交换。终结点三大元素:ABCA解决寻址问题,C解决协定(契约)问题,这里可以设置服务的功能集,这是我们真正用到的地方,B绑定是重中之重,解决了其中最重要的一系列问题。

(一)系统提供了全面的绑定实现

系统提供了相当全面的绑定:

·BasicHttpBinding 适用于符合WS-basic profileweb服务通信。例如基于.netWS。传输协议Http,消息编码:文本/xml。在配置文件里这个节点的名称就是第一个单词全小写,后边单词首字母大写。basicHttpBinding。其它的系统提供的绑定在配置文件中一般也按这个规则走。

·WSHttpBinding 非双工的。

·WSDualHttpBinding 双工的

·NetTcpBinding 跨计算机通信

·NetNamedPipeBinding 计算机内通信

·NetMsmqBinding 消息队列

其它的省略。这里有几个详细的表(这几个表太好):

ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs

/wcf_con/html/2c243746-45ce-4588-995e-c17126a579a6.htm

 

(二)绑定基类

绑定在WCF实现上就是上边这些绑定,对应着各自的类。它们都由Binding类派生:

public class BasicHttpBinding : Binding, IBindingRuntimePreferences

 

Binding

public abstract class Binding : IDefaultCommunicationTimeouts

Binding类实现了IdefaultCommunicationTimeouts接口,这个接口用于定义通信的超时属性。它有4个属性:

 

·CloseTimeout  获取 close 方法(由通信对象调用)在超时之前的时间间隔。

·OpenTimeout  获取 open 方法(由通信对象调用)在超时之前的时间间隔。

·ReceiveTimeout  获取 receive 方法(由通信对象调用)在超时之前的时间间隔。

·SendTimeout  获取 send 方法(由通信对象调用)在超时之前的时间间隔。

 

(三)绑定是分层的

一个绑定对象对应着一组有序的集合,一组绑定元素对象的集合,而这些元素按层来分别处理各自的事务。因为WCF服务是基于消息交换,而这种交换是在终结点之间进行的,所以每个元素负责终结点通信的一个方面。例如:编码,传输,安全等等。

它的层:

选项

是否必需

事务流

TransactionFlowBindingElement

可靠性

ReliableSessionBindingElement

安全性

对称、非对称、传输级

形状更改

CompositeDuplexBindingElement

传输升级

SSL 流、Windows 流、对等解析程序

编码

文本、二进制、MTOM、自定义

传输

TCP、命名管道、HTTPHTTPSMSMQ、自定义

 

其中编码层和传输层是必要条件。

这一层一层的绑定元素(Binding Element)就是BindingElement

(四)绑定元素

绑定元素在WCF实现上就是BindingElement

它做为其它绑定元素的基类。绑定元素用于为各种类型的信道生成信道工厂和信道监听器以处理传出和传入消息的绑定元素。(有的叫通道,也有叫信道的,指得是一个意思,但理解上有一些不同。)

由它派生的绑定元素实现:

OneWayBindingElement

TransportBindingElement

CompositeDuplexBindingElement

StreamUpgradeBindingElement

PrivacyNoticeBindingElement

UseManagedPresentationBindingElement

ReliableSessionBindingElement

SecurityBindingElement

MessageEncodingBindingElement

PeerResolverBindingElement

TransactionFlowBindingElement

ContextBindingElement

从字面上可以大概能够看出每个元素的主要义务。

 

(五)绑定的绑定元素

这里看下几种系统绑定是由哪几个绑定元素组成的。

在绑定基类中Binding有个CreateBindingElements方法,

public abstract BindingElementCollection CreateBindingElements()

它的功能就是:创建一个集合,该集合包含属于当前绑定的绑定元素,而由绑定基类实现的各个系统绑定都实现了这个方法。然后绑定元素(BindingElement)有个GetType方法,用于获取绑定元素实例(Type),然后就可以通过类型属性来得到详细信息了。

1)现在看看BasicHttpBinding绑定包含哪些绑定元素:

public void TestBasicHttpBindingElements()

{

    BasicHttpBinding _binding=new BasicHttpBinding();

BindingElementCollection _list =

_binding.CreateBindingElements();

 

    foreach (BindingElement ele in _list)

    {

Console.WriteLine(ele.GetType().FullName);

    }

}

结果:

System.ServiceModel.Channels.TextMessageEncodingBindingElement

System.ServiceModel.Channels.HttpTransportBindingElement

 

它由2层组成。从字面上可以大概推断出一层用于消息编码,一层用于传输。绑定是分层的,最低要有两层:传输层与编码层。

·TextMessageEncodingBindingElement这个绑定元素的结构为:

BindingElement

MessageEncodingBindingElement

TextMessageEncodingBindingElement

 

它的定义为:

public sealed class TextMessageEncodingBindingElement

: MessageEncodingBindingElement,

IWsdlExportExtension, IPolicyExportExtension

·HttpTransportBindingElement这个绑定元素的结构为:

BindingElement

TransportBindingElement

HttpTransportBindingElement

 

它的定义为:

public class HttpTransportBindingElement

: TransportBindingElement,

IWsdlExportExtension, IPolicyExportExtension

 

2WSDualHttpBinding绑定元素

public void TestWSDuplexHttpBindingElements()

{

    WSDualHttpBinding _binding = new WSDualHttpBinding();

BindingElementCollection _list =

_binding.CreateBindingElements();

 

    foreach (BindingElement ele in _list)

    {

Console.WriteLine(ele.GetType().FullName);

    }

}

 

结果:

System.ServiceModel.Channels.TransactionFlowBindingElement

System.ServiceModel.Channels.ReliableSessionBindingElement

System.ServiceModel.Channels.SymmetricSecurityBindingElement

System.ServiceModel.Channels.CompositeDuplexBindingElement

System.ServiceModel.Channels.OneWayBindingElement

System.ServiceModel.Channels.TextMessageEncodingBindingElement

System.ServiceModel.Channels.HttpTransportBindingElement

 

 

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
重新想象 Windows 8 Store Apps (52) - 绑定: 与 Element Model Indexer Style RelativeSource 绑定, 以及绑定中的数据转换
原文:重新想象 Windows 8 Store Apps (52) - 绑定: 与 Element Model Indexer Style RelativeSource 绑定, 以及绑定中的数据转换 [源码下载] 重新想象 Windows 8 Store Apps (52) - 绑定: 与 Ele...
635 0
WCF绑定的选择
版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/8593924 格式与编码 每种标准绑定使用的传输协议与编码格式都不相同,如表1-1 所示。
521 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13893 0
chrome 技巧篇-如何查看web元素绑定的监听事件
chrome 技巧篇-如何查看web元素绑定的监听事件
9 0
大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize
.net引用webservice 发生错误 应该是因为获得的数据大于webconfig设定的大小   解决: 在web。config中修改 MaxReceivedMessageSize 的大小 并保持与maxBufferSize 一致
583 0
虚函数(动态绑定)对于 OO/C++的重要性
从商业角度看,如果没有虚函数,那么也就没有什么理由要从传统的 C 转移到C++了。(在本FAQ中我们将忽略泛型编程和标准库)。技术人员通常认为在C和非面向对象的C++之间有很大的区别,但如果没有面向对象,这个区别通常不足以证明培训开发者,新工具等的成本是值得的。
1073 0
从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... +------------------------------------------------------------ github:https://github.
1238 0
+关注
265
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载