最近一直在看蒋老师那13篇《我的WCF之旅》,终于看完了,看得很慢,记得最初出来工作的时候那时的技术总监建议我去看的,可几个月前我才开始看,看了几个月才把13篇看完。第一篇WCF的博文是我在做毕业设计的时候写的,可到了现在才出第二篇关于WCF的博文,毕业也一年了,工作换了。

  弄WCF最基本的我还是记得蒋老师说过的组成一个终结点的三个要素可简称成ABC,分别是Address,Binding和Contract。这个在通过配置文件来配置WCF时通过endpoint节点能提现出来

<endpoint address="" binding ="ws2007HttpBinding" contract=" Logic.ILogic.IServiceLogic" />

在蒋老师的博文中有提到Endpoint包含的对象中,除了Address,Binding和Contract外,还有一个Behavior,这个Behavior出现在Service节点中,它对整个WCF服务也是有作用的。那下面则都说说这几个,以加深了解和理解。

Address:网络上任何一个资源都需要有一个位置才可以供其它人访问,Address就是以URI给这个Endpoint定位,让客户端需要WCF服务时有路可寻。就类似Socket通讯一样,需要建立Endpoint;URI是Address的其中一个很基本的成员,还有用于认证Endpoint与Endpoint通讯时,对方的Endpoint是否自身想要通讯的Endpoint的IdentityHeaders是鄙人认为使得Endpoint定位最具有灵活性与扩展性的成员。Headers可以看出它是一个集合,包含一个或多个Header,这些Header会加到SOAP Message(SOAP:简单对象访问协议)的头部中,header多数存放Address的信息,在过滤地址的时候会发挥作用。这里有两个应用场景,一个是WCF服务的路由(Routing)和客户端认证(Authentication),要进行这两个操作都可以把相关的内容加到header里面。

Binding:,WCF作为一个通讯框架,通讯是必不可少的,WCF中的C是Communication的简写,就是交流交互的意思,Binding就主要负责通讯这一块了,它负责了底层通讯的各个方面,WCF的通讯是基于消息传递模式的,那么关于这个消息传输时消息内容使用的编码(text/XML, binary,MTOM),消息的传输方式(TCP, Http, Named Pipe, MSMQ),不同的安全机制(SSL,Message Level Security),互操作性(Basic Profile 1.1,WS, WS-Federation,.NET,Peer,MSMQ),支持会话,支持事务,支持双工通讯,这些都可以选择不同的Binding在Binding上设置来实现。下面一个表格将介绍各个WCF默认提供的Binding以及他们各自的说明。

绑定

互操作性

安全

会话

事务

双工

传输协议

编码格式

说明

BasicHttpBinding

Basic Profile 1.1

(None), Transport, Message

None, (None)

None

n/a

HTTP/HTTPS

Text,

MTOM

一个绑定,适用于与符合WS-Basic Profile的Web服务

(例如基于ASP.NET Web服务(ASMX)的服务)进行

的通信。此绑定使用HTTP作为传输协议,并使用文本/XML

作为默认的消息编码。

WSHttpBinding

WS

Transport, (Message), Mixed

(None), Transport, Reliable Session

(None), Yes

n/a

HTTP/HTTPS

Text,

MTOM

一个安全且可互操作的绑定,适合于非双工服务约定。

WSDualHttpBinding

WS

(Message)

(Reliable Session)

(None), Yes

Yes

HTTP

Text,

MTOM

一个安全且可互操作的绑定,适用于双工服务协定或通过

SOAP媒介进行的通信。

WSFederationHttpBinding

WS-Federation

(Message)

(None), Reliable Session

(None), Yes

No

HTTP/HTTPS

Text,

MTOM

一个安全且可互操作的绑定,支持WS联合协议并使联合中的

组织可以高效地对用户进行身份验证和授权。

NetTcpBinding

.NET

(Transport), Message

Reliable Session, (Transport)

(None), Yes

Yes

TCP

Binary

一个安全且进过优化的绑定,使用于WCF应用程序之间跨

计算机的通信。

NetNamedPipeBinding

.NET

(Transport)

None, (Transport)

(None), Yes

Yes

IPC

Binary

一个安全,可靠且进经过优化的绑定,适用于WCF应用程序

之间计算机上的通信。

NetMsmqBinding

.NET

Message, (Transport), Both

(None)

(None), Yes

No

MSMQ

Binary

一个排队绑定,适用于WCF应用程序之间跨计算机的通信。

NetPeerTcpBinding

Peer

(Transport)

(None)

(None)

Yes

P2P

Binary

一个支持多计算机安全通信的绑定。

MsmqIntegrationBinding

MSMQ

(Transport)

(None)

(None), Yes

n/a

MSMQ

Binary

一个绑定,适用于WCF应用程序和现有消息队列

(也称为MSMQ)应用程序之间跨计算机的通信。

ws2007HttpBinding

WS

Transport, (Message), Mixed

(None), Transport, Reliable Session

(None), Yes

n/a

HTTP/HTTPS

Text,

MTOM

一个安全且可互操作的绑定,可为Security ReliableSession

的正确版本和TransactionFlow绑定元素提供支持。

ws2007FederationHttpBinding

WS

Transport, (Message), Mixed

(None), Transport, Reliable Session

(None), Yes

n/a

HTTP/HTTPS

Text,

MTOM

一个安全且可互操作的绑定,它派生自WS2007HttpBinding

并支持联合安全性。

Contract:从Endpoint的配置上看contract,它是一个接口的完全限定名,而这个接口里面使用了OptionContract特性的方法都是客户端能通过WCF访问的,那就是说Contract就是暴露了这个WCF服务能执行的操作,告诉了客户端这个WCF服务能干些什么那是OptionContract。除此之外,服务端与客户端通讯的数据格式DataContract,在通讯过程中,这个消息的交互是采用的通讯模式(请求响应模式,单向模式,双工模式)是通过OptonContract特性的配置,在通讯过程中所用到的数据类型,我们需要额外的设置,那可以通过在DataContract和DataMember特性上设置,这些设置将影响到数据的序列化与反序列化,最终使得数据在传递之后生效。关于Contract这边配置基本上与Config文件没太大关系,反而与程序编码时用的比较多。

Behavior:Behavior虽然不是一个Endpoint的三要素之一,但它的配置也会影响到Endpoint间通讯的行为,比如回调客户端时的超时时间,用于向服务验证客户端身份的凭据,指定WCF回调对象的服务调试。

  目前对WCF了解不完全透彻,以上有说错的恳请指出,谢谢!

再谈ABC的更多相关文章

  1. 【字符串算法1】 再谈字符串Hash(优雅的暴力)

    [字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述  [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...

  2. 再谈JavaScript的数据类型问题

    JavaScript的数据类型问题已经讨论过很多次了,但许多人还有许多书仍然沿用着错误的.混乱的一些观点,所以就再细讲一回. 提及这个讨论的原因在于argb同学在我的MSN博客上的一段回复,又更早的起 ...

  3. Python学习6——再谈抽象(面对对象编程)

    1.对象魔法 在面对对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法. 使用对象而非全局变量以及函数的原因有多个,而最重要的好处不过以下几点: 多态:可对不同类型的对象 ...

  4. 小数据池 is和== 再谈编码

    昨日回顾 上节课内容回顾 1. 字典 {key:value, key:value.....} 成对的保存数据 字典没有索引. 不能切片, 字典的key必须是可哈希的.不可变的 1. 增加: dic[新 ...

  5. [转载]再谈百度:KPI、无人机,以及一个必须给父母看的案例

    [转载]再谈百度:KPI.无人机,以及一个必须给父母看的案例 发表于 2016-03-15   |   0 Comments   |   阅读次数 33 原文: 再谈百度:KPI.无人机,以及一个必须 ...

  6. Support Vector Machine (3) : 再谈泛化误差(Generalization Error)

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  7. Unity教程之再谈Unity中的优化技术

    这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体   这一步主要是为了针对性能瓶颈中的”顶点 ...

  8. 浅谈HTTP中Get与Post的区别/HTTP协议与HTML表单(再谈GET与POST的区别)

    HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http: ...

  9. Another Look at Events(再谈Events)

    转载:http://www.qtcn.org/bbs/simple/?t31383.html Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不 ...

随机推荐

  1. C#Light 再推荐,顺便介绍WP8 功能展示项目

    由于在项目中验证了C#Light脚本,C#Light的健壮和稳定程度已经得到了很大的提升. 现在可以更好的把C#Light介绍给大家使用,同时也有更多的自信,告诉大家这是一个已经具有商业价值的类库. ...

  2. winform 通过webservice向服务器提交图片需要注意的地方

    最近一个winform项目中需要通过拍照或者上传本地文件或者截图的方式把产品图片上传到服务器,最后选择了服务器部署webservice的方式来进行.其中遇到了一些问题记录下来. 不多说,直接上服务端代 ...

  3. SlipHover,能感知鼠标方向的图片遮罩效果jQuery插件

    接上一篇博文,介绍完jQuery插件开发后这里上一个自己的作品,也是初次实践,小有成就的感觉. 话说这个插件年前就写好了,然后挂到GitHub,然后就偷偷看着Google Analysis心中暗自激动 ...

  4. 让我欲罢不能的node.js

    从我大一接触第一门编程语言C开始,到现在工作三年陆续接触到了C.汇编.C++.C#.Java.JavaScript.PHP,还有一些HTML.CSS神马的,从来没有一门语言让我像对node.js一样的 ...

  5. JavaScript包装对象

    JavaScript是面向对象的语言,使用”.”操作符可以访问对象的属性和方法,而对于基本类型(null, undefined, bool, number, string)应该是值类型,没有属性和方法 ...

  6. Linux网路编程系列-网络I/O模型

    应用程序从网络中拿数据,要经历两个阶段:1.等待数据准备好-分组到达,被拷贝到内核缓冲区,组装数据报:2.数据从内核缓冲区拷贝至用户态应用程序的缓冲区.Unix下五个I/O模型: 阻塞I/O: 进程调 ...

  7. iOS Crash常规跟踪方法及Bugly集成运用

    当app出现崩溃, 研发阶段一般可以通过以下方式来跟踪crash信息 #1.模拟器运行, 查看xcode错误日志 #2.真机调试, 查看xcode错误日志 #3.真机运行, 查看device系统日志 ...

  8. Java-数组练习1

    1.已知2个一维数组:a[]={3,4,5,6,7},b[]={1,2,3,4,5,6,7}:把数组a与数组b 对应的元素乘积再赋值给数组b,如:b[2]=a[2]*b[2]:最后输出数组b的元素. ...

  9. 不要怂,就是GAN (生成式对抗网络) (一)

    前面我们用 TensorFlow 写了简单的 cifar10 分类的代码,得到还不错的结果,下面我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现. 自从 Ian Goodf ...

  10. HQL查询语言——转载(http://www.cnblogs.com/20gg-com/p/6045739.html)

    Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性. HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据 ...