再谈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事件处理的时候发现一篇很不 ...
随机推荐
- Django集成百度富文本编辑器uEditor
UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. 首先从ueEditor官网下载最新版本的包, ...
- User and User Groups in Linux
本文梳理了一下Linux用户和用户组的常用的一些命令. 有关的配置文件: /etc/group 存储当前系统中所有用户组信息 /etc/gshadow 存储当前系统中所有用户组的密码 /etc/pas ...
- IOS Animation-动画基础、深入
1. Model Layer Tree(模型层树)和Presentation Layer Tree(表示层树) CALayer是动画产生的地方.当我们动画添加到Layer时,是不直接修改layer的属 ...
- 分离EF connectionString里的db连接串
创建EF模型后,自动生成的connectionString如下: <add name="TravelPPEntities" connectionString="me ...
- 说说设计模式~ 模版模式(Template)
返回目录 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...
- 关于stm32的正交解码
关于正交解码,我先解释何为正交解码,,,,其实名字挺高大上的,,,,还是先说编码器吧 看一下我用过的一种编码器 编码器的 线 数 ,是说编码器转一圈输出多少个脉冲,,,如果一个编码器是500线,,,说 ...
- Lua字符串库(整理)
Lua字符串库小集 1. 基础字符串函数: 字符串库中有一些函数非常简单,如: 1). string.len(s) 返回字符串s的长度: 2). string.rep(s,n) 返回 ...
- [Spring框架]Spring AOP基础入门总结一.
前言:前面已经有两篇文章讲了Spring IOC/DI 以及 使用xml和注解两种方法开发的案例, 下面就来梳理一下Spring的另一核心AOP. 一, 什么是AOP 在软件业,AOP为Aspect ...
- Atitit (Sketch Filter)素描滤镜的实现 图像处理 attilax总结
Atitit (Sketch Filter)素描滤镜的实现 图像处理 attilax总结 1.1. 素描滤镜的实现方法比较简单,这里我们直接写出算法过程如下:1 1.2. 颜色减淡COLOR_DO ...
- Atiti qq空间破解(3)------------gui图形化通用cli执行器atiuse
Atiti qq空间破解(3)------------gui图形化通用cli执行器atiuse 结构:::命令行+以及反馈log框1 cli_guiUI/index.htm1 /AtiPlatf_c ...