糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > WCF绑定细节(2)——绑定 绑定元素

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

时间:2021-10-04 21:20:22

相关推荐

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

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

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

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

·BasicHttpBinding 适用于符合WS-basic profile的web服务通信。例如基于.net的WS。传输协议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服务是基于消息交换,而这种交换是在终结点之间进行的,所以每个元素负责终结点通信的一个方面。例如:编码,传输,安全等等。

它的层:

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

这一层一层的绑定元素(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.positeDuplexBindingElement

System.ServiceModel.Channels.OneWayBindingElement

System.ServiceModel.Channels.TextMessageEncodingBindingElement

System.ServiceModel.Channels.HttpTransportBindingElement

如果觉得《WCF绑定细节(2)——绑定 绑定元素》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
[转]WCF绑定选择

[转]WCF绑定选择

2020-10-10

WCF(四)  绑定

WCF(四) 绑定

2021-07-05

WCF(五)  深入理解绑定

WCF(五) 深入理解绑定

2023-11-19

WCF中的标准绑定

WCF中的标准绑定

2020-09-03