再谈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事件处理的时候发现一篇很不 ...
随机推荐
- SQLServer性能优化之 nolock,大幅提升数据库查询性能
公司数据库随着时间的增长,数据越来越多,查询速度也越来越慢.进数据库看了一下,几十万调的数据,查询起来确实很费时间. 要提升SQL的查询效能,一般来说大家会以建立索引(index)为第一考虑.其实除了 ...
- Java提高篇(三一)-----Stack
在Java中Stack类表示后进先出(LIFO)的对象堆栈.栈是一种非常常见的数据结构,它采用典型的先进后出的操作方式完成的.每一个栈都包含一个栈顶,每次出栈是将栈顶的数据取出,如下: Stack通过 ...
- Metro风格的Android界面应用
最近项目中需要一个选择月份查询客户余额的功能,原先的android只能满足查询当月,不可以查询任意月份.当然改起来还是很简单的,服务端增加一个月份参数,客户端传入这个参数即可.闲来无事,月份的选择风格 ...
- 手把手教你用python打造网易公开课视频下载软件2-编码相关说明
函数getdownLoadInfo(url)主要实现核心功能:根据url地址,获取课程信息:课程名(courseTitle),课程数目(courseCount),可下载视频数目(videoCount) ...
- JavaScript 正则表达式上——基本语法
定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...
- Git学习笔记(4)——添加远程仓库,克隆远程库,以及库的推送
本文记录了远程库的连接和库的克隆和推送. 远程仓库简介 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且 ...
- 新特性AAtitti css3 新特性attilax总结titti css
Atitti css3 新特性attilax总结 图片发光效果2 透明渐变效果2 文字描边2 背景拉伸2 CSS3 选择器(Selector)4 @Font-face 特性7 Word-wrap &a ...
- 好友录v1.2.7_Build(7790)
<好友录>是使用.net Framework4.0+sqlite开发的,属于WingKu(谷毅科技)系列软件之一.它是一款外观时尚.美观,操作简单.易用,功能强大的个人通讯信息管理软件.它 ...
- iOS----单例模式(Singleton)
单例的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例:二是 ...
- 无法启动此程序,因为计算机中丢失AdbWinApi.dll。尝试重新安装该程序以解决此问题
第一次搭建android开发环境,装完adb以后,打开DOS验证安装是否成功:但输入adb logcat调试时,系统弹出以下异常的对话框: 无法启动此程序,因为计算机中丢失AdbWinApi.dll. ...