标签:
由于项目需求,第一次用wcf做基于internet的访问。整理一下自己的探索,作为总结,也供自己以后回顾。
要求:(1)wcf服务需要部署在internet之中。
(2)双工通信。
出现问题:
根据上面的要求,自己首先想到的是wsDualHttpBinding. 因为httpBing可以穿越防火墙,适应于internet环境,并且可以双工通信。当部署环境为intranet,一切都OK。但当通过Internet访问wcf服务,在NAT模式下,问题出来了。总是提示访问超时。根据调试结果是由于wcf服务没法回调造成。
原因分析:
经过查找资料,搞清楚虽然wsDualHttpBinding支持双工通信,但在NAT模式下,必须通过“穿墙技术”(网上查的)来进行IP地址映射。这个自己看了很多资料,还是搞不清楚,希望哪位大侠可以帮忙。
wsDualHttpBinding双工通信原理为建立两条通道,一条供客户端和服务端通信,另一条为回调通道,供服务端和客户端通信。而这两条通道是单独的通道,回调通道并不会根据客户端到服务端的通道进行建立,而是自己单独建立一条。因此,当建立回调通道时候,在NAT模式下,回调通道是找不到所对应的客户端地址,所以出现访问超时的提示。
解决方案:
鉴于wsDualHttpBinding的限制,自己也没找到相关穿墙技术。只能用NetTcpBinding.
默认情况下,NetTcpBinding是基于intranet的,安全模式为Transport,所以要想在Internet访问必须把安全模式改为Message。即:
<netTcpBinding> <binding name="NewBinding1" > <security mode="Message"> <message clientCredentialType="None"/> </security> </binding> </netTcpBinding>
NetTcpBinding双工通信原理为建立一条通道,所以当客户端到服务端的通道建立之后,回调通道将采用同样的通道。所以不存在回调通道寻找客户端地址的问题。经过自己的测试可以满足上述两个要求。
下面是自己网上查找的相关协议的使用环境。
绑定和安全场景
绑定 |
局域网场景 |
互联网 |
B2B场景 |
匿名场景 |
无安全场景 |
BasicHttpBinding |
No |
No |
Yes |
No |
Yes |
NetTcpBinding |
Yes |
Yes |
No |
Yes |
Yes |
NetPeerTcpBinding |
No |
No |
No |
No |
Yes |
NetNamedPipeBinding |
Yes |
No |
No |
No |
Yes |
WSHttpBinding |
No |
Yes |
Yes |
Yes |
Yes |
WSFederationHttpBinding |
No |
No |
No |
No |
|
WSDualHttpBinding |
No |
Yes |
Yes |
Yes |
Yes |
NetMsmqBinding |
Yes |
No |
No |
Yes |
Yes |
安全场景特性
特性 |
局域网场景 |
互联网 |
B2B场景 |
匿名场景 |
无安全场景 |
Transport |
Yes |
No |
No |
No |
No |
Message |
No |
Yes |
Yes |
Yes |
No |
Service authentication |
Windows |
Ceritificate |
Ceritificate |
Ceritificate |
No |
Client authentication |
Windows |
ASP.NET |
Ceritificate |
No |
No |
Authorization |
Windows |
ASP.NET |
No/ASP.NET |
No |
No |
Impersonation |
Yes |
No |
No |
No |
No |
Intranet |
Transport保护 使用tcp绑定 windows集成的安全 |
Internet |
只能使用Message形式的保护,需要数字证书 tcp wsHttp绑定 使用Membership进行安全认证 |
Anoymous |
使用Message形式的保护,需要数字证书 tcp wsHttp绑定 |
None |
消息不保护 http tcp wsHttp绑定 |
B2b |
BasicHttpBinding WSHttpBinding WSDualHttpBinding
|
总结:
在发布过程中,遇到很多小问题。如服务证书认证,端口无法访问之类等问题,但这些网上都会有相关解决方案。只要自己查,都会解决的。也希望各位能给出更好的意见。
标签:
原文地址:http://www.cnblogs.com/foreverfuture/p/4201445.html