一、为什么要使用 net.tcp 绑定
为了更好地实现双向通信,.NET Framework在 3.0的时候引入了一个全新
的通信协议Net.TCP并作为WCF的一部分。现在Net.TCP将包含在
Silverlight 4中,相比于HTTP Polling Duplex,它极大地改进了吞吐量
和连接的数量。
我们可以通过Silverlight 4绑定到HTTP Duplex Services上,因而应用可
以不断轮询服务以进行更新,这模拟了双向通讯的工作方式。Silverlight
4则引入了一个更好的解决方案:Net.TCP Port Sharing Service。与HTTP
不同,Net.TCP提供了本地的双向通信机制,极大地改进了应用的性能。打
开的端口可以由多个应用共享,然而Silverlight只能访问介于4502-4534
范围之间的端口。
根据微软WCF开发经理Tomasz Janczuk所述,相对于HTTP Duplex来说,
Net.TCP在如下方面进行了重大的改进:
* 吞吐量:对于UI线程来说提升了5.5倍,对于worker线程来说提升了
870倍。
* 最大的客户端数量:服务器可支持的连接客户端数量是之前的5-6倍
。
该协议适用于对通信速度要求很高的Silverlight应用。但其一个严重缺陷
是所使用的一系列端口通常会被防火墙阻止,因此它不适合于公网、外部
应用,而适合于局域网。另一个问题是它不支持SSL,这样就会遇到安全问
题,Janczuk说将在未来解决该问题
NetTcpBinding 使用 TCP 完成传输,使用二进制进行消息编码,为消息
版本使用 SOAP 1.2。该绑定默认启用传输安全并可支持事务(如果启用了
事务)。您可以看出,此绑定配置的重点是创建一个在 Windows 环境中性
能较好的信道堆栈,为您提供替换各种 COM+ 和 .NET 远程投资的极好选
择。
net.tcp 绑定的主要好处是性能。如果在您的安全的 intranet 环境中的
WCF 服务要快速的 Silverlight 应用程序进行通信可以使用此绑定。
现在此 net.tcp 绑定的目的,是要在 intranet 环境中使用。因为此协议
是 Silverlight Socket 实现的基础上生成的同一网络安全限制的约束。
Silverlight Socket TCP的限制端口范围是 4502 – 4534 。因此,它要
求在我们可以控制防火墙配置环境。以这种方式我们可以轻松地监视
Silverlight 应用程序通信和维护企业网络的安全性。
Net.tcp 协议在 Silverlight 中的也不支持传输层安全性。为例,我们不
能有 SSL 通信。
Net.tcp 双功能支持
net.tcp 绑定的另一个重要好处是,支持双工通信。现在我们可以使用同
一个 HTTP 投票从以前版本的 Silverlight 双工代理,并只需指定该代理
将使用 net.tcp 绑定,一切都将工作。我们可以使 WCF 服务使用 HTTP
Internet 客户端轮询双工的协议,并为内网客户端使用 net.tcp 协议。
编程模型是和以前一样的,使用方法很简单。
二、WCF服务寄宿方式
WCF服务寄宿方式:通过自我寄宿的方式寄宿服务和通过IIS寄宿服务
服务寄宿的目的就是开启一个进程,为WCF服务提供一个运行的环境。通过
为服务添加一个或多个终结点,使之暴露给潜给的服务消费者。服务消费
者最终通过相匹配的终结点对该服务进行调用。
WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一
个宿主的过程。WCF是一个基于消息的通信框架,采用基于终结点
(Endpoint)的通信手段。终结点由地址(Address)、绑定(Binding)
和契约(Contract)三要素组成。
地址(Address):地址决定了服务的位置,解决了服务寻址的问题;
绑定(Binding):绑定实现了通信的所有细节,包括网络传输、消息编码
,以及其他为实现某种功能(比如安全、可靠传输、事务等)对消息进行
的相应处理。WCF中具有一系列的系统定义绑定,比如BasicHttpBinding、
WsHttpBinding、NetTcpBinding等;
契约(Contract):契约是对服务操作的抽象,也是对消息交换模式以及
消息结构的定义。
可以通过代码的方式完成服务的寄宿,也可以通过配置文件完成服务的寄
宿,但在进行真正的WCF应用开发时,一般不会直接通过编码的方式进行终
结点的添加和服务行为的定义,而是通过配置的方式进行,配置文件的编
写可以直接使用VS提供的配置工具。你可以通过VS的工具(Tools)菜单,
选择“WCF Service Configuration Editor”子项,开启这样的一个配置
编辑器,具体的使用方法请查阅MSDN。
三、寄宿于IIS的基于net.tcp绑定的WCF的服务部署方式
1.为WCF服务创建.svc文件
基于IIS的服务寄宿要求相应的WCF服务具有相应的.svc文件,.svc文件部
署于IIS站点中,对WCF服务的调用体现在对.svc文件的访问上。.svc文件
的内容很简单,仅仅包含一个ServiceHost指令(Directive),该指令具
有一个必须的Service属性和一些可选的属性。所以最简单的.svc仅仅具有
一个包含Service属性(该属性指明了相应的WCF服务的有效类型)的
ServiceHost指令。
2.为WCF服务创建虚拟目录
在IIS7中,网站本身不能用于host 使用netTcp协议的WCF服务。如果要
hostWCF服务,则必须用网站下挂的应用程序,并且给应用程序注册支持
netTcp协议。注册协议时,netTcp用的哪个端口譬如net.tcp 4502:* 那么
调用该端口的客户端web.config中的endpoint
address=“net.tcp://machineName:4502/xxxService/xxx.svc”
只 IIS7 有为 net.tcp 绑定支持,所以您必须具有 IIS7,您的计算机上
安装了。
对 Windows 进程激活服务 (WAS) 承载 WCF 服务与内部 IIS7 net.tcp 绑
定。若要启用 WAS 上承载 IIS7 的 net.tcp 你必须做几件事:
1) 您必须启用 Windows Communication Foundation 的 HTTP 激活功能
。IIS 的一个重要功能是能够在收到该应用程序的 HTTP 请求的激活一个
web 应用程序。一个类似的功能存在 IIS7 的 net.tcp,但它不可能在默
认情况下启用。 (控制面板-程序-打开或关闭Windows应用程序-勾选
Microsoft.Net Frameworks 3.0/3.1下的所有选项)
2) 您必须设置应用程序使用已启用的.net 4.0 框架,并且必须启用
net.tcp 协议。(网站对应的应用池中设置框架为.NET4.0,网站高级属性
中启用协议加上”,net.tcp”,注意网站和应用程序都要启用net.tcp协议
)
3) 您还必须使用端口的 net.tcp 绑定 4502 – 4534 范围内。 选中网
站,点击最右边操作区的绑定,添加网站绑定,选中net.tcp然后再绑定信
息中输入形如:4502:*
注意几个问题:
1)在非IIS host的程序中,因为有个问题,WCF的bug貌似(Artech在他的
博客中谈到这个问题:WCF技术剖析之六:为什么在基于ASP.NET应用寄宿
(Hosting)下配置的BaseAddress无效),所以在服务的endpoint 中我们
这么写:
<endpoint address=”net.tcp://localhost/MyService”
binding=”netTcpBinding” contract=”MyService.IMyService” />
但是,在IIS中BaseAddress是无效的,IIS自动加了应用程序站点名称作为
前缀,即:”net.tcp://localhost/MyService”,所以我们在IIS host的
WCF服务里的配置文件的endpoint address中再写一遍地址就重复了,导致
服务无法正确读取。
IIS host的WCF 服务正确的endpoint的配置写法是:
<endpoint address=”" binding=”netTcpBinding”
contract=”MyService.IMyService” />
2)silverlight客户端添加服务引用的时候,点击发现,查找到的是http
开头的URI而不是以net.tcp开头的URI,因为服务的元数据是通过http协议
传输的,添加服务后查看到你服务的配置文件上的client中的endpoint链
接是形如这样的:net.tcp://shirlly-
pc:4502/MyWebChat.Web/DuplexService.svc
3)如果进行了如上的配置,还是找不到服务,那有可能是跨域权限的问题
,你要在部署站点的根目录下添加一个策略文件,注意是放在根目录的下
面而不是放在应用程序下面(貌似这个策略文件只能放到WWWROOT下面才起
作用)
总结配置wcf的步骤
一系统环境准备:
1、必须是IIS7
2、在windows添加删除程序中启用 Windows Communication Foundation
二、部署配置:
1、只要在wwwroot放置一个策略文件即可,不需要在站点上方策略文件
2、将服务寄宿到IIS上的一个站点上可以单独建一个站点,也可以寄宿到默认站点
3、修改站点的应用池的.netFramework版本为v4.0
4、在寄宿的站点上将服务添加为站点的应用程序
5、分别在站点和应用程序的高级配置里加上协议net.tcp
6、在站点上添加net.tcp 主机为4502:*的绑定
重启IIS
推荐WCF学习的文章:
http://www.cnblogs.com/artech/archive/2007/09/15/893838.html
http://www.cnblogs.com/chocstarfish/archive/2010/06/26/1765568.ht
ml(demo有点小bug后面会把修复后的Demo上传)
为了更好地实现双向通信,.NET Framework在 3.0的时候引入了一个全新
的通信协议Net.TCP并作为WCF的一部分。现在Net.TCP将包含在
Silverlight 4中,相比于HTTP Polling Duplex,它极大地改进了吞吐量
和连接的数量。
我们可以通过Silverlight 4绑定到HTTP Duplex Services上,因而应用可
以不断轮询服务以进行更新,这模拟了双向通讯的工作方式。Silverlight
4则引入了一个更好的解决方案:Net.TCP Port Sharing Service。与HTTP
不同,Net.TCP提供了本地的双向通信机制,极大地改进了应用的性能。打
开的端口可以由多个应用共享,然而Silverlight只能访问介于4502-4534
范围之间的端口。
根据微软WCF开发经理Tomasz Janczuk所述,相对于HTTP Duplex来说,
Net.TCP在如下方面进行了重大的改进:
* 吞吐量:对于UI线程来说提升了5.5倍,对于worker线程来说提升了
870倍。
* 最大的客户端数量:服务器可支持的连接客户端数量是之前的5-6倍
。
该协议适用于对通信速度要求很高的Silverlight应用。但其一个严重缺陷
是所使用的一系列端口通常会被防火墙阻止,因此它不适合于公网、外部
应用,而适合于局域网。另一个问题是它不支持SSL,这样就会遇到安全问
题,Janczuk说将在未来解决该问题
NetTcpBinding 使用 TCP 完成传输,使用二进制进行消息编码,为消息
版本使用 SOAP 1.2。该绑定默认启用传输安全并可支持事务(如果启用了
事务)。您可以看出,此绑定配置的重点是创建一个在 Windows 环境中性
能较好的信道堆栈,为您提供替换各种 COM+ 和 .NET 远程投资的极好选
择。
net.tcp 绑定的主要好处是性能。如果在您的安全的 intranet 环境中的
WCF 服务要快速的 Silverlight 应用程序进行通信可以使用此绑定。
现在此 net.tcp 绑定的目的,是要在 intranet 环境中使用。因为此协议
是 Silverlight Socket 实现的基础上生成的同一网络安全限制的约束。
Silverlight Socket TCP的限制端口范围是 4502 – 4534 。因此,它要
求在我们可以控制防火墙配置环境。以这种方式我们可以轻松地监视
Silverlight 应用程序通信和维护企业网络的安全性。
Net.tcp 协议在 Silverlight 中的也不支持传输层安全性。为例,我们不
能有 SSL 通信。
Net.tcp 双功能支持
net.tcp 绑定的另一个重要好处是,支持双工通信。现在我们可以使用同
一个 HTTP 投票从以前版本的 Silverlight 双工代理,并只需指定该代理
将使用 net.tcp 绑定,一切都将工作。我们可以使 WCF 服务使用 HTTP
Internet 客户端轮询双工的协议,并为内网客户端使用 net.tcp 协议。
编程模型是和以前一样的,使用方法很简单。
二、WCF服务寄宿方式
WCF服务寄宿方式:通过自我寄宿的方式寄宿服务和通过IIS寄宿服务
服务寄宿的目的就是开启一个进程,为WCF服务提供一个运行的环境。通过
为服务添加一个或多个终结点,使之暴露给潜给的服务消费者。服务消费
者最终通过相匹配的终结点对该服务进行调用。
WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一
个宿主的过程。WCF是一个基于消息的通信框架,采用基于终结点
(Endpoint)的通信手段。终结点由地址(Address)、绑定(Binding)
和契约(Contract)三要素组成。
地址(Address):地址决定了服务的位置,解决了服务寻址的问题;
绑定(Binding):绑定实现了通信的所有细节,包括网络传输、消息编码
,以及其他为实现某种功能(比如安全、可靠传输、事务等)对消息进行
的相应处理。WCF中具有一系列的系统定义绑定,比如BasicHttpBinding、
WsHttpBinding、NetTcpBinding等;
契约(Contract):契约是对服务操作的抽象,也是对消息交换模式以及
消息结构的定义。
可以通过代码的方式完成服务的寄宿,也可以通过配置文件完成服务的寄
宿,但在进行真正的WCF应用开发时,一般不会直接通过编码的方式进行终
结点的添加和服务行为的定义,而是通过配置的方式进行,配置文件的编
写可以直接使用VS提供的配置工具。你可以通过VS的工具(Tools)菜单,
选择“WCF Service Configuration Editor”子项,开启这样的一个配置
编辑器,具体的使用方法请查阅MSDN。
三、寄宿于IIS的基于net.tcp绑定的WCF的服务部署方式
1.为WCF服务创建.svc文件
基于IIS的服务寄宿要求相应的WCF服务具有相应的.svc文件,.svc文件部
署于IIS站点中,对WCF服务的调用体现在对.svc文件的访问上。.svc文件
的内容很简单,仅仅包含一个ServiceHost指令(Directive),该指令具
有一个必须的Service属性和一些可选的属性。所以最简单的.svc仅仅具有
一个包含Service属性(该属性指明了相应的WCF服务的有效类型)的
ServiceHost指令。
2.为WCF服务创建虚拟目录
在IIS7中,网站本身不能用于host 使用netTcp协议的WCF服务。如果要
hostWCF服务,则必须用网站下挂的应用程序,并且给应用程序注册支持
netTcp协议。注册协议时,netTcp用的哪个端口譬如net.tcp 4502:* 那么
调用该端口的客户端web.config中的endpoint
address=“net.tcp://machineName:4502/xxxService/xxx.svc”
只 IIS7 有为 net.tcp 绑定支持,所以您必须具有 IIS7,您的计算机上
安装了。
对 Windows 进程激活服务 (WAS) 承载 WCF 服务与内部 IIS7 net.tcp 绑
定。若要启用 WAS 上承载 IIS7 的 net.tcp 你必须做几件事:
1) 您必须启用 Windows Communication Foundation 的 HTTP 激活功能
。IIS 的一个重要功能是能够在收到该应用程序的 HTTP 请求的激活一个
web 应用程序。一个类似的功能存在 IIS7 的 net.tcp,但它不可能在默
认情况下启用。 (控制面板-程序-打开或关闭Windows应用程序-勾选
Microsoft.Net Frameworks 3.0/3.1下的所有选项)
2) 您必须设置应用程序使用已启用的.net 4.0 框架,并且必须启用
net.tcp 协议。(网站对应的应用池中设置框架为.NET4.0,网站高级属性
中启用协议加上”,net.tcp”,注意网站和应用程序都要启用net.tcp协议
)
3) 您还必须使用端口的 net.tcp 绑定 4502 – 4534 范围内。 选中网
站,点击最右边操作区的绑定,添加网站绑定,选中net.tcp然后再绑定信
息中输入形如:4502:*
注意几个问题:
1)在非IIS host的程序中,因为有个问题,WCF的bug貌似(Artech在他的
博客中谈到这个问题:WCF技术剖析之六:为什么在基于ASP.NET应用寄宿
(Hosting)下配置的BaseAddress无效),所以在服务的endpoint 中我们
这么写:
<endpoint address=”net.tcp://localhost/MyService”
binding=”netTcpBinding” contract=”MyService.IMyService” />
但是,在IIS中BaseAddress是无效的,IIS自动加了应用程序站点名称作为
前缀,即:”net.tcp://localhost/MyService”,所以我们在IIS host的
WCF服务里的配置文件的endpoint address中再写一遍地址就重复了,导致
服务无法正确读取。
IIS host的WCF 服务正确的endpoint的配置写法是:
<endpoint address=”" binding=”netTcpBinding”
contract=”MyService.IMyService” />
2)silverlight客户端添加服务引用的时候,点击发现,查找到的是http
开头的URI而不是以net.tcp开头的URI,因为服务的元数据是通过http协议
传输的,添加服务后查看到你服务的配置文件上的client中的endpoint链
接是形如这样的:net.tcp://shirlly-
pc:4502/MyWebChat.Web/DuplexService.svc
3)如果进行了如上的配置,还是找不到服务,那有可能是跨域权限的问题
,你要在部署站点的根目录下添加一个策略文件,注意是放在根目录的下
面而不是放在应用程序下面(貌似这个策略文件只能放到WWWROOT下面才起
作用)
总结配置wcf的步骤
一系统环境准备:
1、必须是IIS7
2、在windows添加删除程序中启用 Windows Communication Foundation
二、部署配置:
1、只要在wwwroot放置一个策略文件即可,不需要在站点上方策略文件
2、将服务寄宿到IIS上的一个站点上可以单独建一个站点,也可以寄宿到默认站点
3、修改站点的应用池的.netFramework版本为v4.0
4、在寄宿的站点上将服务添加为站点的应用程序
5、分别在站点和应用程序的高级配置里加上协议net.tcp
6、在站点上添加net.tcp 主机为4502:*的绑定
重启IIS
推荐WCF学习的文章:
http://www.cnblogs.com/artech/archive/2007/09/15/893838.html
http://www.cnblogs.com/chocstarfish/archive/2010/06/26/1765568.ht
ml(demo有点小bug后面会把修复后的Demo上传)