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进程始终关不掉,获得管理员权限去杀或者重启都没有用,然后正常 ...
随机推荐
- POJ3294--Life Forms 后缀数组+二分答案 大于k个字符串的最长公共子串
Life Forms Time Limit: 500 ...
- HDU-1241Oil Deposits
Description GeoSurvComp地质调查公司负责探测地下石油储藏. GeoSurvComp现在在一块矩形区域探测石油,并把这个大区域分成了很多小块.他们通过专业设备,来分析每个小块中是否 ...
- CF-Approximating a Constant Range
Description When Xellos was doing a practice course in university, he once had to measure the intens ...
- squid 代理服务器安装配置
ubuntu16.04 安装squid代理服务器配置 本文参考 http://www.cnblogs.com/newflypig/archive/2012/09/28/2862000.html 1,删 ...
- NuGet 问题及小技巧
在使用NuGet程序包管理时,经常会遇到的一些小问题.比如,联网搜索时间太长,搜索不到常见或想要的程序包,程序包版本兼容问题,想安装制定的版本等. 那么我们可以使用以下的一些小技巧来解决. 1.检查N ...
- java使用ObjectInputStream从文件中读取对象
import java.io.EOFException;import java.io.FileInputStream;import java.io.FileNotFoundException;impo ...
- [React] React Router: hashHistory vs browserHistory
In this lesson we'll look at hashHistory which uses a hash hack to track our route changes vs browse ...
- MODULE_DEVICE_TABLE
1. MODULE_DEVICE_TABLE (usb, skel_table);该宏生成一个名为__mod_pci_device_table的局部变量,该变量指向第二个参数.内核构建时,depmod ...
- samba服务简介
1.1 Samba 概述Samba主要用于Windows和Linux之间的文件共享,也一样用于Linux和Linux之间的共享文件:不过对于Linux和Linux之间共享文件有更好的网络文件系统NFS ...
- 常用分组函数count-avg-sum-max-min
分组函数也称多行函数,用于对一组数据进行运算,针对一组数据(取自于多行记录的相同字段)只返回一个结果,例如计算公司全体员工的工资总和.最高工资.最低工资.各部门的员工平均工资(按部门分组)等.由于分组 ...