博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF-NAT模式访问
阅读量:6692 次
发布时间:2019-06-25

本文共 1869 字,大约阅读时间需要 6 分钟。

由于项目需求,第一次用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双工通信原理为建立一条通道,所以当客户端到服务端的通道建立之后,回调通道将采用同样的通道。所以不存在回调通道寻找客户端地址的问题。经过自己的测试可以满足上述两个要求。

下面是自己网上查找的相关协议的使用环境。

绑定和安全场景

绑定

局域网场景

互联网

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

 

总结:

在发布过程中,遇到很多小问题。如服务证书认证,端口无法访问之类等问题,但这些网上都会有相关解决方案。只要自己查,都会解决的。也希望各位能给出更好的意见。

 

转载于:https://www.cnblogs.com/foreverfuture/p/4201445.html

你可能感兴趣的文章
SQLServer之创建全文索引
查看>>
如何以并发方式在同一个流上执行多种操作?--复制流
查看>>
Spring Boot 参考指南(开发Web应用程序)
查看>>
javascript块级作用域处理闭包和释放内存的垃圾回收
查看>>
快速入门React
查看>>
正则表达式语法入门
查看>>
关于顶级、一级、二级域名如何理解?
查看>>
Laravel 5.6 正式发布(文档翻译工作将在春节后启动)
查看>>
兼容浏览器原生DOM的各种特性总结
查看>>
推荐引擎
查看>>
前端真的能做到彻底权限控制吗?
查看>>
携程对AIOps场景和算法的探索与实践
查看>>
AngularJS中$q的promise使用及链式调用传值问题
查看>>
Aop说明
查看>>
国外 服务器,阿里云海外服务器-海外节点云服务器全线2折起挺好
查看>>
5G火车站来了!上海虹桥火车站5G网络建设正式启动
查看>>
Flutter终将逆袭!1.2版本发布,或将统一江湖
查看>>
社区团购公司“邻邻壹” 完成 3000 万美元 A 轮融资,今日资本领投
查看>>
mysql5.7获取root密码
查看>>
【C#】使用fo-dicom完成BMP,JPG,PNG图片转换为DICOM文件
查看>>