WCF-NAT模式访问
由于项目需求,第一次用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 |
总结:
在发布过程中,遇到很多小问题。如服务证书认证,端口无法访问之类等问题,但这些网上都会有相关解决方案。只要自己查,都会解决的。也希望各位能给出更好的意见。
WCF-NAT模式访问的更多相关文章
- VMware workstation 网络选择 NAT模式 访问外网
多年不用本地做测试 尽然被 nat 模式給卡着了 :动手的还是所以要记录一下: 1.根据自己需求创建 虚拟机 之后: 配置[网络适配器] -- 选择 nat 模式 ( 选择网卡 ) 虚拟机 ...
- Linux 虚拟机通过NAT模式访问外网
1.配置本地VM8地址 2.配置虚拟机NAT网卡:设置VM8网卡地址和Linux主机相同网段地址,网关随便设置 3.编译网卡文件 vim /etc/sysconfig/network-scri ...
- NAT模式实现虚拟机共享主机网络
上一节我们在虚拟机上搭建了linux系统,并利用桥接模式访问互联网,这一节,我们来配置一下通过NAT模式访问互联网.说到这里有些小伙伴可能要问了,NAT模式和桥接模式有什么区别呢? 桥接模式: 虚拟机 ...
- 虚拟机中桥接模式和NAT模式以及仅主机模式的区别
桥接模式和NAT模式 网络连接类型的选择,网络连接类型一共有桥接.NAT.仅主机和不联网四种. 桥接:选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系,相当于连接在同一交换机上. NAT:NAT模 ...
- VMware NAT模式多个虚拟机相互访问
在一台主机上只允许有一个NAT模式的虚拟网络.因此,同一台主机上的多个采用NAT模式网络连接的虚拟机也是可以相互访问的.
- VMware安装Ubuntu配置NAT模式下静态IP,解决访问外网问题
安装好VMware后,打开网络连接可以看到有VMware Network Adapter VMnet1和VMware Network Adapter VMnet8两个网络适配器,VMnet1是针对桥接 ...
- 别名alias永久生效别名alias永久生效;虚拟机的NAT模式,进行静态IP配置,并A、B的实现免密访问
别名alias永久生效 1.打开cd /etc/profile.d 目录 新建文件my_alias.sh 2.my_alias.sh里面添加 alias p=’poweroff -h’ alias r ...
- 本地虚拟机NAT模式下怎么设置才可以访问外网
记:因为我要在本机虚拟机上安装Docker,结果发现虚拟机环境不能上网,是主机模式.我要调成net模式下才可以访问外网,这就需要怎么设置.下面文章记录一下. 在本机安装VMware软件后,系统中会自动 ...
- 外网访问VMware(Centos7.0,NAT模式)搭建的web服务器应用
首先参考 https://www.cnblogs.com/studyhard-cq/p/11551755.html 设置好NAT模式,能访问公网. 1.打开VMware,点击左上角编辑 ...
- vmware进程,虚拟机NAT模式配置固定ip,访问外网与ping通主机
vmware进程杀不掉 在使用vmware虚拟机时,如果强制结束vmware进程,可能会发现在资源监视器中有一个vmware-vmx.exe进程始终关不掉,获得管理员权限去杀或者重启都没有用,然后正常 ...
随机推荐
- Python中的multiprocessing和threading
Python中的multiprocessing和threading分别使用来实现多进程编程和多线程编程的.其中threading比较简单,而前者比较繁琐. 下面,我们进行一下分析: 多线程--thre ...
- Angular.js VS. Ember.js:谁将成为Web开发的新宠?
这篇博文陈述的非常好,比较全面的剖析了Angular.js与Ember.js,下面的链接,供学习与参考: http://www.csdn.net/article/2013-09-09/2816880- ...
- C++中使用stringstream进行类型转换操作
stringstream包括istringstream和ostringstream,提供读写string的功能,使用时需包含stream文件.4个操作:1. stringstream strm; 创建 ...
- Java中快速排序的实现
快速排序是对冒泡排序的一种改进.它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要 小,然后再按次方法对这两部分数据分别进行快速排序,整个排 ...
- HDU-3661(贪心)
Problem Description In a factory, there are N workers to finish two types of tasks (A and B). Each t ...
- 关于C/C++函数指针声明的理解
[前言] 由于最近对函数指针的理解比较模糊,所有又重新学习了一把关于函数指针的知识,参考了很多书籍和网上的文章.现在本人进行一下分享和总结.本文的其实只是整理和总结别人现有的文章,作为备用参考文档. ...
- JavaWeb:基于MVC设计模式的一个小案例(一)
(未经允许,请勿转载,谢谢.) 本案例的处理过程: 客户端发送一个请求给服务器,服务器把这个请求给Servlet,Servlet 获取请求信息,根据请求信息的情况去调用 model (在这里是一个普通 ...
- 如何使用深度学习破解验证码 keras 连续验证码
在实现网络爬虫的过程中,验证码的出现总是会阻碍爬虫的工作.本期介绍一种利用深度神经网络来实现的端到端的验证码识别方法.通过本方法,可以在不切割图片.不做模板匹配的情况下实现精度超过90%的识别结果. ...
- Android软键盘强制弹出,隐藏输入法.
本文实例讲述了Android实现弹出键盘代码,是一个非常实用的功能.代码非常简洁.分享给大家供大家参考. 具体功能代码如下: ? 1 2 3 4 5 6 7 8 Timer timer = new T ...
- UVA10534-----Wavio Sequence-----动态规划之LIS
题目地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...