再谈ABC
最近一直在看蒋老师那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的Identity。Headers是鄙人认为使得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】 再谈字符串Hash(优雅的暴力)
[字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述 [字符串算法1] 字符串Hash 老版原文: RK哈希(Rabin_Ka ...
- 再谈JavaScript的数据类型问题
JavaScript的数据类型问题已经讨论过很多次了,但许多人还有许多书仍然沿用着错误的.混乱的一些观点,所以就再细讲一回. 提及这个讨论的原因在于argb同学在我的MSN博客上的一段回复,又更早的起 ...
- Python学习6——再谈抽象(面对对象编程)
1.对象魔法 在面对对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法. 使用对象而非全局变量以及函数的原因有多个,而最重要的好处不过以下几点: 多态:可对不同类型的对象 ...
- 小数据池 is和== 再谈编码
昨日回顾 上节课内容回顾 1. 字典 {key:value, key:value.....} 成对的保存数据 字典没有索引. 不能切片, 字典的key必须是可哈希的.不可变的 1. 增加: dic[新 ...
- [转载]再谈百度:KPI、无人机,以及一个必须给父母看的案例
[转载]再谈百度:KPI.无人机,以及一个必须给父母看的案例 发表于 2016-03-15 | 0 Comments | 阅读次数 33 原文: 再谈百度:KPI.无人机,以及一个必须 ...
- Support Vector Machine (3) : 再谈泛化误差(Generalization Error)
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...
- Unity教程之再谈Unity中的优化技术
这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的”顶点 ...
- 浅谈HTTP中Get与Post的区别/HTTP协议与HTML表单(再谈GET与POST的区别)
HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http: ...
- Another Look at Events(再谈Events)
转载:http://www.qtcn.org/bbs/simple/?t31383.html Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不 ...
随机推荐
- 必须知道的SQL编写技巧,多条件查询不拼字符串的写法
在做项目中,我们经常遇到复杂的查询方法,要根据用户的输入,判断某个参数是否合法,合法的话才能当作过滤条件,我们通常的做法是把查询SQL赋值给一个字符串变量,然后根据判断条件动态的拼接where条件进行 ...
- 使用ACE遇到无法打开包括文件:“inttypes.h”的解决方案
本来想使用ACE_Get_Opt类来做一个命令行解析的功能,但是当项目中配置好了ACE库的路径后,编译时遇到"无法打开包括文件: inttypes.h : No such file or d ...
- 支持断点续传的文件上传插件——Huploadify-V2.0来了
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- Unity3D音乐音效研究-MIDI与波表
其实音乐音效这个命题本身没什么好研究的. Unity3D提供了丰富的结构和使用方式,足够使用了. 但是我有一些小小的想法和需求,一般的Unity资料并没有给我答案. 一个是容量要小.MP3.OGG的高 ...
- 为什么一定要杀掉病毒?---帮一位老师解决MyDocument.exe优盘文件夹图标病毒问题
最近一位大学老师给我抱怨了一个她遇到的烦恼,一直在纠结,生活都被打乱了,事情大概是这样的: 她的优盘里辛辛苦苦弄好备课文件,放在了优盘里,可是每次上课时,就是找不到文件.有时好多文件都被修改了,非常烦 ...
- Lucene系列-近实时搜索(1)
近实时搜索(near-real-time)可以搜索IndexWriter还未commit的内容,介于immediate和eventual之间,在数据比较大.更新较频繁的情况下使用.本文主要来介绍下如何 ...
- EF架构~在T4模版中为所有属性加默认值
回到目录 在项目开发过程中,出现了一个问题,就是新添加一个非空字段后,原来的程序逻辑需要被重新修改,即将原来的字段添加到程序里,这种作法是非常不提倡的,所以,我通过T4模版将原来的实体类小作修改,解决 ...
- js笔记——理解js中的call及apply
call及apply在js里经常碰得到,但一直感觉很陌生,不能熟练使用.怎样才能熟练应用呢? 为什么存在call和apply? 在javascript OOP中,我们经常会这样定义: function ...
- 自定义Image自动切换图像控件
做这么一个控件,图片自动切换,形成动画效果. 随便的码码,码完发现东西太少了,不过还算完善. public class MyPictureBox : PictureBox { Timer timer ...
- 优化与扩展Mybatis的SqlMapper解析
接上一篇博文,这一篇来讲述怎么实现SchemaSqlMapperParserDelegate——解析SqlMapper配置文件. 要想实现SqlMapper文件的解析,还需要仔细分析一下mybatis ...