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进程始终关不掉,获得管理员权限去杀或者重启都没有用,然后正常 ...
随机推荐
- Java JDBC中,MySQL字段类型到JAVA类型的转换
1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射 java.sql.Types定义了常 ...
- uniq 命令
uniq 命令 文字 uniq是LINUX命令 用途 报告或删除文件中重复的行. 语法 uniq [ -c | -d | -u ] [ -f Fields ] [ -s Characters ] [ ...
- Delphi 调试BPL包中引用另外的BPL的方法。
在实际程序中,遇到1.bpl 引用了2.bpl中的方法,2.bpl的方法进入后又引用了3.bpl ,刚开始挺蒙,怎么调试呢, 其实bpl就是dll, 故, 1.我在Delphi的run->pa ...
- HDU-5532(LIS-nlogn)
思路: 解法一: 新的认识get+1,对于一个数组,可以通过记录他'<'和'>'来判断数组的升降序状态,这种方法只需要n的复杂度就可以解决问题,需要注意的一点是,每次删除一个结点在消失两个 ...
- redis 网络流程图 <一>
本来一直想好好读下redis源码.可是每次读了一点就不读了. 主要是没坚持每天都读. 隔几天看.就忘记前面的流程.就越来越不想看了. 很是蛋疼.这个还是要坚持读完的.打算这段时间都源码的时候.都大 ...
- thinkphp+datatables+ajax 大量数据服务器端查询
今天一白天全耗在这个问题上了,知乎2小时除外... 现在19:28分,记下来以备后查. 问题描述:从后台数据库查询人员信息,1w多条,使用一个好看的基于bootstrap的模板 Bootstrap-A ...
- spring mvc json 返回乱码问题解决(vestion:3.x.x)
本文是转载文章,感觉比较好,如有侵权,请联系本人,我将及时删除. 原文网址:<spring mvc json 返回乱码问题解决(vestion:3.x.x)> 工程中用springmvc返 ...
- js中的数据类型及其转换
Js中的数据类型 Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 一,number Number数据类型指的是数字,可以为整型, ...
- <有序数组>转化为<按二分法遍历顺序排列的数组>(C++实现)
在进行参数试错时,通常将可能的参数由小到大排列一个个进行测试,这样的测试顺序很多时候不太合理,因此写了一个按二分法遍历顺序排列的算法,通常能更快的找到合适的参数.代码如下: /************ ...
- 中国大推力矢量发动机WS15 跨入 世界先进水平!
"太行"WS-15让俄闭嘴令美叹服 歼20试飞向世界证明,中国军工世界一流,并有望与美英法争夺新一代航空发动机桂冠.笔者请教解放军专家证实:中国四代机所配套的两台18吨推力的WS- ...