1

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

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

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

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

WCF 中提供的两个双向通道似乎无法解决问题:

  • NetTcpBinding 似乎不支持 http 代理(来源

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

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

4

6 回答 6

1

您正在寻找一种名为 Comet 的技术。Wikipedia entry 如果您在 Google 上搜索“comet wcf”,您会发现可以为您指明正确方向的文章。

于 2008-12-18T15:30:18.390 回答
0

I have a similar need, and I saw this article about the Comet-esque feature that they've provided for Silverlight 2 over WCF: Silverlight Polling Duplex.

I haven't tried it yet but I'm thinking that the assembly built against the desktop runtime may include the client classes as well, if that's the case then this may be usable outside of Silverlight.

Edit: I checked both assemblies and they both implement the same Bindings and Channels, it looks like the same code just built against the desktop framework; so you should be able to use the "Server" assembly in a desktop application.

于 2009-04-17T19:06:31.127 回答
0

根据我得到的类似问题的答案,.NET v4 确实通过带有 WSDualHttpBinding 类的 NAT 工作。你的问题是几年前被问到的,所以那不是你的选择......

于 2010-12-24T12:24:32.373 回答
0

我在这里发现了一些有趣的信息

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

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

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

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

于 2008-12-18T15:32:56.793 回答
0

是的。您可以使用 WSDualHttpBinding 或 NetTcpBinding。

于 2008-12-18T12:38:41.933 回答
0

一个合理的防火墙应该允许这种行为。由于通信是由客户端发起的,有状态防火墙将允许通信通道保持打开状态,但仅限于两个知名端点之间。

于 2008-12-18T14:08:45.620 回答