WCF中常用的binding方式
WCF中常用的binding方式:
BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务。用于兼容旧的Web ASMX 服务。
WSHttpBinding: 比 BasicHttpBinding 更加安全,通常用于 non-duplex 服务通讯。
WSDualHttpBinding: 和 WSHttpBinding 相比,它支持 duplex 类型的服务。
WSFederationHttpBinding: WS-Federation 安全通讯协议。
NetTcpBinding: 使用 TCP 协议,用于在局域网(Intranet)内跨机器通信。有几个特点:可靠性、事务支持和安全,优化了 WCF 到 WCF 的通信。限制是服务端和客户端都必须使用 WCF 来实现。
NetNamedPipeBinding: 使用命名管道进行安全、可靠、高效的单机服务通讯方式。
NetMsmqBinding: 使用消息队列在不同机器间进行非连接通讯。
NetPeerTcpBinding: 使用 P2P 协议在多机器间通讯。
MsmqIntegrationBinding: 将 WCF 消息转化为 MSMQ 消息,使用现有的消息队列系统进行跨机器通讯。如 MSMQ。
|
名称 |
传输 |
编码 |
共同操作 |
|
BasicHttpBinding |
HTTP/HTTPS |
Text |
Yes |
|
NetTcpBinding |
TCP |
Binary |
No |
|
NetPeerTcpBinding |
P2P |
Binary |
No |
|
NetNamedPipeBinding |
IPC |
Binary |
No |
|
WSHttpBinding |
HTTP/HTTPS |
Text,MTOM |
Yes |
|
WSFederationBinding |
HTTP/HTTPS |
Text,MTOM |
Yes |
|
WSDualHttpBinding |
HTTP |
Text,MTOM |
Yes |
|
NetMsmqBinding |
MSMQ |
Binary |
No |
|
MsmqIntegrationBinding |
MSMQ |
Binary |
Yes |
|
Binding名称 |
Configuration Element |
描述 |
|
BasicHttpBinding |
basicHttpBinding |
一个指定用符合基本网络服务规范通讯的binding,它用http进行传输,数据格式为text/xml |
|
WSHttpBinding |
wsHttpBinding |
一个安全的通用的binding,但它不能在deplex中使用 |
|
WSDualHttpBinding |
wsDualHttpBinding |
一个安全的通用的binding,但能在deplex中使用 |
|
WSFederationHttpBinding |
wsFederationHttpBinding |
一个安全的通用的支持WSF的binding,能对用户进行验证和授权 |
|
NetTcpBinding |
netTcpBinding |
在wcf应用程序中最适合跨机器进行安全通讯的binding |
|
NetNamedPipeBinding |
netNamedPipeBinding |
在wcf应用程序中最适合本机进行安全通讯的binding |
|
NetMsmqBinding |
netMsmqBinding |
在wcf应用程序中最适合跨机器进行安全通讯的binding,并且支持排队 |
|
NetPeerTcpBinding |
netPeerTcpBinding |
一个支持安全的,多机交互的binding |
|
MsmqIntegrationBinding |
msmqIntegrationBinding |
一个用于wcf与现有msmq程序进行安全通讯的binding |
|
绑定类名称 |
传输 |
消息编码 |
消息版本 |
安全模式 |
可靠消息传送 |
事务流(默认情况下禁用) |
|
BasicHttpBinding |
HTTP |
文本 |
SOAP 1.1 |
无 |
不支持 |
不支持 |
|
WSHttpBinding |
HTTP |
文本 |
SOAP 1.2 WS-Addressing 1.0 |
消息 |
禁用 |
WS-AtomicTransactions |
|
WSDualHttpBinding |
HTTP |
文本 |
SOAP 1.2 WS-Addressing 1.0 |
消息 |
启用 |
WS-AtomicTransactions |
|
WSFederationHttpBinding |
HTTP |
文本 |
SOAP 1.2 WS-Addressing 1.0 |
消息 |
禁用 |
WS-AtomicTransactions |
|
NetTcpBinding |
TCP |
二进制 |
SOAP 1.2 |
传输 |
禁用 |
OleTransactions |
|
NetPeerTcpBinding |
P2P |
二进制 |
SOAP 1.2 |
传输 |
不支持 |
不支持 |
|
NetNamedPipesBinding |
命名管道 |
二进制 |
SOAP 1.2 |
传输 |
不支持 |
OleTransactions |
|
NetMsmqBinding |
MSMQ |
二进制 |
SOAP 1.2 |
消息 |
不支持 |
不支持 |
|
MsmqIntegrationBinding |
MSMQ |
不支持(使用 WCF 之前的序列化格式) |
不支持 |
传输 |
不支持 |
不支持 |
|
CustomBinding |
您决定 |
您决定 |
您决定 |
您决定 |
您决定 |
您决定 |
可以通过修改WCF配置文件来修改binding的方式,修改WCF配置文件可以使用VS自带的WCF配置修改工具(WCF Service Configuration Editor)
这里写一个配置文件的注释,这份是一个Service端的配置文件(不是Host,所以能公开元数据)。
<!-- Service端的配置文件,公开元数据与Http连接 -->
<system.serviceModel> WCF 配置开始
<behaviors> 一个服务器行为的配置开始
<serviceBehaviors>
<behaviorname="NewBehavior"> 配置一个行为 name:行为的名称
<serviceDebug /> 表示此service可以调试
<serviceMetadatahttpGetEnabled="true"httpsGetEnabled="false" />
元数据的配置, httpGetEnabled:是否可以使用Http来获取元数据,
httpsGetEnabled:是否可以使用Https来获取元数据
当设置为可以获取元数据, 就必须配置http或https的路径
</behavior>
</serviceBehaviors>
</behaviors> 服务器行为配置结束
<services> 服务器配置开始
<service behaviorConfiguration="NewBehavior" 配置一个服务器, behaviorConfiguration:指示服务行为,b连接到behaviors
name="Service"> name:服务类的位置
<endpoint 开始一个端口的配置
binding="basicHttpBinding" binding: 绑定类型 Http
contract=" IShopServiceV2" >
contract:公共接口的位置
</endpoint>
<endpoint 开始第二个端口的配置,这个端口是用于发布元数据
address="mex" address:端口的监听位置,mex表示设置成相对地址
binding="mexHttpBinding" binding: 绑定方式.
此处为元数据的绑定方式
mexHttpBinding(对于 HTTP 发布)。
mexHttpsBinding(对于 HTTPS 发布)。
mexNamedPipeBinding(对于命名管道发布)。
mexTcpBinding(对于 TCP 发布)。
contract="IMetadataExchange"/> contract:公共接口的位置
IMetadataExchange: 公开用于返回有关服务的元数据的方法。
<host> 主机配置
<baseAddresses>
<addbaseAddress="http:127.0.0.1:8001/WCFService" />
配置一个服务器的监听路径
</baseAddresses>
</host>
</service>
</services>
代理类生成:不单是WCF服务文件(.svn)能用工具(svcutil.exe)来生成客户端代理,即使使用WCF服务库也可以通过WCF服务主机的元数据地址来使用svcutil.exe生成代理。
一个双绑定,带配置文件的Host的Demo:
<system.serviceModel>
<services>
<servicename="Service">
<endpointbinding="netTcpBinding"contract="IShopServiceV2" />
<endpointbinding="basicHttpBinding"contract="IShopServiceV2" />
</service>
</services>
</system.serviceModel>
Uri tcpAddress = new Uri("net.tcp://localhost:9000/Service");
Uri httpAddress = new Uri("http://localhost:9001/Service");
ServiceHost Host = new ServiceHost(typeof(WCFCompnent.Service), tcpAddress, httpAddress);
Host.Open();
Console.WriteLine("服务已经启动!");
Console.Read();
Host.Close();
不带配置文件的Host:
Uri baseAddress = new Uri("net.tcp://localhost:9000/ServoceHost");
Uri mexAddress = new Uri("mex", UriKind.Relative);
using (ServiceHost serviceHost = new ServiceHost(typeof(Service), baseAddress))
{
NetTcpBinding binding = new NetTcpBinding();
serviceHost.AddServiceEndpoint(typeof(PublicElements.publicInterface.IService), binding, baseAddress);
serviceHost.Open();
Console.WriteLine("服务器已经打开");
Console.WriteLine("按任意键关闭");
Console.Read();
serviceHost.Close();
}
WCF中常用的binding方式的更多相关文章
- WCF中常用的binding方式 z
WCF中常用的binding方式: BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务.用于兼容旧的Web ASMX 服务. WSHttpBinding: 比 Bas ...
- NAND Flash中常用的纠错方式(ECC算法)
Hanming,RS,BCH —— NAND Flash中常用的纠错方式 因为闪存中会有出错的可能,如果没有使用ECC模块,读出的数据和写入的数据会有不匹配的可能,也许一个文件中只有一两个bit不匹配 ...
- 基础篇:1.JavaScript运行在html中,引用有几种方式?—— 6.js中常用的输出方式?
书接上文,上文提到若干条JavaScript的基础性知识,大部分都是一些概念性的东西,本着认真严谨的态度,我们要认真对待,有些条目的问题是某个知识点的周边延伸,为节约篇幅,就一起整理了,如有描述不对的 ...
- java中常用的加密方式
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...
- Java中常用的加密方式(附多个工具类)
一.Java常用加密方式 Base64加密算法(编码方式) MD5加密(消息摘要算法,验证信息完整性) 对称加密算法 非对称加密算法 数字签名算法 数字证书 二.分类按加密算法是否需要key被分为两类 ...
- cocos2dx 游戏开发中常用场景切换方式以及特性
runWithScene(CCScene* scene):启动游戏,并运行scene 场景.这个方法在主程序启动时第一次启动主场景时调用. replaceScene(CCScene* scene) ...
- JS中常用的输出方式(五种)
1.alert("要输出的内容"); ->在浏览器中弹出一个对话框,然后把要输出的内容展示出来 ->alert都是把要输出的内容首先转换为字符串然后在输出的 2.doc ...
- Input类中常用的验证方式
Deolin一般将Input类对象作为POST请求方法的参数, Input类的域与前端的数据结构一一对应,由于后端不应该相信前端传过来的任何数据, 所以前端的数据对象先绑定到Input对象中,通过JS ...
- 在2d游戏中常用的向量方式
function cc.exports.VectorRotateByAngle(vector,angle)--计算向量旋转后的向量,angle:正数逆时针,负输顺时针 angle = angle*ma ...
随机推荐
- table中bordercolor属性设置后最新ie浏览器或firefox中不显示边线,借助table的css来实现边线
table中的bordercolor属性设置后在最新的ie或者firefox中均不显示边线,table的边线又是常用功能.只能使用css来实现了,更通用,更方便一些. css: .ctable{ b ...
- 承接cardboard外包,unity3d外包(北京动软— 谷歌CARDBOARD真强大)
手把手教你玩转googlecardboard[不知道在这里发可以不?] 谷歌Google I/O开发者大会于北京时间6月26日0点在美国旧金山举行,谷歌发布了Android L手机系统:Android ...
- Lua学习---Lua的控制结构
前言 由于之前有c/c++.javascript基础,所以学Lua的时候喜欢拿来和前面的语言比较,这里主要和C比较 1.if...else Lua的if语句格式: if 条件 then 条件成立,运行 ...
- 可扩展Web架构与分布式系统(转)
1.1. web分布式系统的设计原则 搭建和运营一个可伸缩的web站点或者应用程序意味着什么?在原始层面上这仅仅是用户通过互联网连接到远程资源-使系统变得可伸缩的部分是将资源.或者访问的资源,分布于多 ...
- Python的第三天
一.字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: ...
- <2016-2-2 总结>
真正的伟人直率真诚,真正的贤人虚怀若谷,真正的强者温文尔雅,有足够的幽默感,尽可能的庄重而不盛气凌人! 真正的伟人直率真诚,真正的贤人虚怀若谷,真正的强者温文尔雅,有足够的幽默感,尽可能的庄重而不盛气 ...
- linux命令-cp/scp {拷贝}
一 命令解释 名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 命令参数: -a 尽可能 ...
- Java内存浅析分类
当jvm运行起来的时候,它会向系统申请一片内存区(不同的jvm实现可能不同,有些可以使用虚拟内存),并将这块内存分出一部分存储程序创建的对象,传递给方法的参数,返回值,局部变量等等,我们将这块内存称之 ...
- ebs如何将客户化的PL/SQL程序发布到webservice
as:cux_gl_hec_iface_soa_pkg. 1.将package声明部分的内容拷贝出来另存为cux_gl_hec_iface_soa_pkg.pls的文件: 2.将该文件上传到服务器上拥 ...
- Visual C++2012中CMFCPropertySheet的用法
看到了一个例子(NewControls),该例子中使用了按钮图片等特效(哈哈,个人觉得挺高端),但是仔细看它的工程,没有xxxDlg.cpp就觉得奇诡了,难道不是基于对话框完成的?最终查阅居然是这样的 ...