本文的出发点:

通过阅读本文,您能了解以下知识:

  1. WCF中的Binding是什么?
  2. Binding的组 成?
  3. Binding Element 的分类?
  4. Binding描述 了那些层面的信息?
  5. 选择正确的 Binding

本文适合的读者:

本文适合WCF的初学者

WCF中的 Binding是什么?

在弄清Binding是什么之前,我们先 看一下WCF的中的Endpoint结构,一个Endpoint就类似于xml web service中的一个asmx文件,它包括三个组成部分1)Address 2) Binding 3) Contract,此三者被称为组成Endpoint的"ABC",下图阐述了Endpoint的组成结构:

ABC分别解决了Endpoint的如下问题:

A解决了Endpoint在哪的问题,也就是"Where is the endpoint?"

B 解决的是如何与Endpoint通讯的问题,也就是"How to communicate with endpoint?"

C解决了Endpoint提供什么功能的问题,也就是"What functionalities do the endpoint provide?"

本文着重讨论Binding, Binding实现的是在客户端和服务端进行通讯的底层细节,包括数据如何传输(比如采用Tcp,Http等),如何解决安全问题 (SSL,Message Level Security等),传输的消息的格式(如text/xml,MTOM,binary等)。

Binding的组成?

Binding包括三个组成部 分:NameSpace,Name和BindingElement,如下图所示:

Name和NameSpace是服务元数据(meta date)的唯一标志,换句话说,二者就像Binding的姓名一样,而BindingElement则描述Binding的特征,我们说Binding 能解决通讯方式的问题,关键是靠BindingElement来进行描述。

Binding Element 的分类

Binding Element中最核心的组成部分,它分为以下三种类型

  1. Encoding Binding Element:它用于描述传输数据的编码方式 ,比如用text/xml进行编码,用binary编码,用MTOM进行编码都是在这个上面定义,每个 Binding Element必须包含一个Encoding Binding Element。 三种编码方式的特点:纯文本(plain text)互操作能力好,二进制编码(binary encoding) 性能好,MTOM (Message Transport Optimization Mechanism) 负载能力好。
  2. Transport Binding Element:它用于描述数据的传输方式, 例如使用tcp进行传输,还是用http进行传输,还是用msmq,这些都是由Transport Binding Element来定

    义,每一个Binding Element 必须包含一个Transport Binding Element。

  3. Protocol Binding Element: 指定诸如安全性、可靠性、上下文流设置(context flow settings)

Binding描述了哪些层面的信息

一个Binding包含着丰富的信息,每种信息都描述了服务端和客户端交互过程中的一方面,如下表所示,Binding描述了这些层面的信息:

层 次

备 注说明

Transactions(事 务)

TransactionFlowBindingElement, 用于指定事务流程

Reliability(信 赖)

ReliableSessionBindingElement, 用于指定对会话方式

Security(安 全)

SecurityBindingElement, 指定安全方式

Encoding(编 码)

Text, Binary, MTOM, Custom,指定数据传输格式

Transport(传 输)

TCP, Named Pipes, HTTP, HTTPS, MSMQ, Custom,指定传输方式

选择正确的 Binding

Binding是可以自定义实现的,可WCF框架已经为我们实现了足够多的Binding,供我们来选择,如下表所示:

Binding 名称

Configuration Element

描 述

BasicHttpBinding

basicHttpBinding

一个指定用符合基本网络服务规范通讯的binding,它用http进行传输,数据格式为text/xml

WSHttpBinding

wsHttpBinding

一个安全的通用的binding,但它不能在duplex中使用

WSDualHttpBinding

wsDualHttpBinding

一个安全的通用的binding,但能在duplex中使用

WSFederationHttpBinding

wsFederationHttpBinding

一个安全的通用的支持WSF的binding,能对用户进行验证和授权

NetTcpBinding

netTcpBinding

在wcf应用程序中最适合跨机器进行安全通讯的binding

NetNamedPipeBinding

netNamedPipeBinding

在wcf应用程序中最适合本机进行安全通讯的binding

NetMsmqBinding

netMsmqBinding

在wcf应用程序中最适合跨机器进行安全通讯的binding,并且支持排队

NetPeerTcpBinding

netPeerTcpBinding

一个支持安全的,多机交互的binding

MsmqIntegrationBinding

msmqIntegrationBinding

一个用于wcf与现有msmq程序进行安全通讯的binding

下面的表格分别删除了上表中的Binding在互操作性(Interoperability), 安全性(Security), 是否支持会话(Session), 是否支持事务(Transactions)和是否为全双工(Duplex)上不同。

Bingding

Interoperability

Security

Session

Transactions

Duplex

BasicHttpBinding

Basic Profile 1.1

(None), Transport, Message

None, (None)

None

n/a

WSHttpBinding

WS

Transport, (Message), Mixed

(None), Transport, Reliable Session

(None), Yes

n/a

WSDualHttpBinding

WS

(Message)

(Reliable Session)

(None), Yes

Yes

WSFederationHttpBinding

WS-Federation

(Message)

(None), Reliable Session

(None), Yes

No

NetTcpBinding

.NET

(Transport), Message

Reliable Session, (Transport)

(None), Yes

Yes

NetNamedPipeBinding

.NET

(Transport)

None, (Transport)

(None), Yes

Yes

NetMsmqBinding

.NET

Message, (Transport), Both

(None)

(None), Yes

No

NetPeerTcpBinding

Peer

(Transport)

(None)

(None)

Yes

MsmqIntegrationBinding

MSMQ

(Transport)

(None)

(None), Yes

n/a

例外,《Programming WCF Services》有一幅图也能说明各自的特征:

下面的图给出了我们选择Binding的 方式

WCF之Binding详解的更多相关文章

  1. WCF中队列服务详解

    WCF中队列服务详解 一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务 ...

  2. [No0000126]SSL/TLS原理详解与WCF中的WS-Security

    SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...

  3. 转:WCF传送二进制流数据基本实现步骤详解

    来自:http://developer.51cto.com/art/201002/185444.htm WCF传送二进制流数据基本实现步骤详解 2010-02-26 16:10 佚名 CSDN   W ...

  4. WCF技术剖析之十七:消息(Message)详解(下篇)

    原文:WCF技术剖析之十七:消息(Message)详解(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]< ...

  5. WCF技术剖析之十七:消息(Message)详解(中篇)

    原文:WCF技术剖析之十七:消息(Message)详解(中篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在上篇中 ...

  6. WCF技术剖析之十七:消息(Message)详解(上篇)

    原文:WCF技术剖析之十七:消息(Message)详解(上篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]消息交换 ...

  7. node源码详解(五) —— 在main函数之前 —— js和C++的边界,process.binding

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource5 本博客同步在https://cnodejs.o ...

  8. 详解vue的数据binding原理

    自从angular火了以后,各种mv*框架喷涌而出,angular虽然比较火,但是他的坑还是蛮多的,还有许多性能问题被人们吐槽.比如坑爹的脏检查机制,数据binding是受人喜爱的,脏检查就有点…性能 ...

  9. 基础拾遗------webservice详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

随机推荐

  1. Python基础(二)之模块

    模块:人们写好的一系列用于实现某种功能的代码封装起来,需要使用的时候直接调用即可. 模块分类:标准模块.第三方模块 标准模块:不需要安装,直接调用即可 第三方模块:需要安装后才可使用 注意:自己创建的 ...

  2. ubuntu14.04 python自带版本升级

    ubuntu14.04 python自带版本升级 sudo add-apt-repository ppa:fkrull/deadsnakes-python2. sudo apt-get update ...

  3. JS toFixed 四舍六入五成双

    以前一直以为toFixed就是四舍五入的方法,后来又有一段时间以为toFixed是五舍六入.今天终于写的时候,终于才知道toFixed是一个叫做四舍六入无成双的诡异的方法... 完全不明白为什么要这么 ...

  4. Silverlight ComboBox with TreeView

    本代码根据国外同名控件代码修改而来--对于N-Tier项目,要求数据源都实现一个接口显然很不方便,因此做了如下修改: 删除接口定义及相关代码 增加了DisplayMember属性,用于标明在Combo ...

  5. Python多线程join的用法

    import threading, time def Myjoin(): print 'hello world!' time.sleep(1) for i in range(5): t=threadi ...

  6. [python实现设计模式]-2.模板方法模式---把大象关进冰箱.

    平时大家上班都很累,为了增加工作中的欢乐气氛,黄页组准备搞个游戏. 游戏的名字是把大象关进冰箱.游戏很简单,需要把指定的物品放进冰箱. 我们都知道,把大象放进冰箱,分3步. 第一步,打开冰箱门,第二步 ...

  7. CodeBlocks安装及配置注意事项

    在使用codeblocks的时候,网上一般只会提供CodeBlocks的项目文件,并不包括编译器和调试器,要使用CodeBlocks的完整功能需要在官网下载完整版. 如图可下载mingw版本. 进入C ...

  8. 《疯狂Java讲义》(二)---- Java程序的运行机制和JVM

    1. 运行机制 Java源文件(*.java)-----使用javac编译----编译成*.class文件----使用java解释执行----特定平台的机器码 2. 原理 负责解释执行字节码文件的就是 ...

  9. 微信连wifi

    微信连wifi 首先需要到微公众平台添加微信连wifi功能插件

  10. Unity3D基础--动态创建和设置游戏对象

    转载自原文:http://m.blog.csdn.net/blog/smbroe/43488627 1.如何动态创建对象:调用GameObject的CreatePrimitive方法可以按模型进行创建 ...