当客户端可以在代理,防火墙或NAT后面时,您是否可以使用WCF实现加密的双向通信?

时间:2008-12-18 12:31:15

标签: .net wcf wcf-binding

我的客户端和服务器都是用.net 3.5编写的,所以我没有互操作性问题。

服务器可以在端口443上完全访问(我正在托管它,所以我可以根据需要打开其他端口)

然而,客户端不太容易访问。它通常位于公司防火墙后面,或者位于NAT后面,或者使用http / https代理连接到互联网。

我需要在客户端和服务器之间建立加密的双向通信。

WCF中提供的两个双向通道似乎不起作用:

  • NetTcpBinding似乎不支持http代理(source

  • WSDualHttpBinding要求客户端有一个公共URI,为服务提供回调端点,遗憾的是这里不是这种情况(source

WCF可以建立这种加密的双向连接(如果需要,可以静默使用https调整),而无需在客户端调整防火墙/代理设置吗?

6 个答案:

答案 0 :(得分:1)

您正在寻找一种名为Comet的技术。 Wikipedia entry 如果你谷歌“彗星wcf”,你会发现应该指向正确方向的文章。

答案 1 :(得分:0)

是。 您可以使用WSDualHttpBinding或NetTcpBinding。

答案 2 :(得分:0)

合理的防火墙应该允许这种行为。由于通信是由客户端启动的,因此状态防火墙将允许通信通道保持打开状态,但仅限于两个众所周知的端点之间。

答案 3 :(得分:0)

我发现了一些有趣的信息here

基本上,可以像这样编辑app.config文件:

<system.net>
   <defaultProxy useDefaultCredentials="true">
      <proxy bypassonlocal="False" proxyaddress="http://gateway:8080" />
   </defaultProxy>
</system.net> 

我不确定它是否适用于NetTcpBinding,尽管该文章声称它适用于自定义绑定。我会试一试,让你知道发生了什么。

UPDATE:它不起作用(defaultproxy配置仅适用于http和https请求)

答案 4 :(得分:0)

我有类似的需求,我看到这篇文章关于他们通过WCF为Silverlight 2提供的Comet-esque功能:Silverlight Polling Duplex

我还没有尝试过,但我认为针对桌面运行时构建的程序集也可能包含客户端类,如果是这种情况,那么这可能在Silverlight之外可用。

编辑:我检查了两个程序集,它们都实现了相同的Bindings和Channels,看起来就像是针对桌面框架构建的相同代码;所以你应该能够在桌面应用程序中使用“服务器”程序集。

答案 5 :(得分:0)

根据this answer我得到了一个类似的问题,.NET v4通过NAT与WSDualHttpBinding类一起工作。几年前你的问题就被问到了,所以那对你来说不是一个选择......