【发布时间】:2009-08-23 03:38:12
【问题描述】:
我想使用 WCF 启用双向通信,而无需在客户端上打开端口。
我正在开发类似 P2P 应用程序(类似于 teamviewer/logmein)的东西,您无需打开端口即可进行通信。
如何在客户端不开端口的情况下通过HTTP/HTTPS实现双向通信?
注意:80 端口可以在服务器中打开...没有问题。
谢谢
【问题讨论】:
我想使用 WCF 启用双向通信,而无需在客户端上打开端口。
我正在开发类似 P2P 应用程序(类似于 teamviewer/logmein)的东西,您无需打开端口即可进行通信。
如何在客户端不开端口的情况下通过HTTP/HTTPS实现双向通信?
注意:80 端口可以在服务器中打开...没有问题。
谢谢
【问题讨论】:
您提到的那些系统的工作原理如下。他们首先尝试让客户端 A 和客户端 B 通过一系列不同的拓扑直接通信,这些拓扑基本上要求其中一个允许传入连接,如果失败,他们会求助于充当中间人的第三方。因此客户端 A 与服务器对话并向其发送消息给客户端 B。然后客户端 A 将发送给它的消息作为响应返回给它。客户端 B 将消息发送到服务器,它从客户端 A 从服务器获取消息。这样,客户端 A 和 B 始终会启动连接,并且不需要为传入流量打开端口。
如果我对您的情况理解正确,您总是希望中间的人。为此,您必须编写一个提供所有相关方法的 WCF 服务。例如像
然后让这些方法分别从某个地方(如数据库或队列或其他东西)存储和检索这些 Message 对象。
然后编写一个使用 HTTP 绑定连接到 WCF 服务的客户端,并调用服务器上的方法并处理结果。
希望你能理解
伪(代码)示例
在这个例子中,我假设消息对象只不过是一个字符串,唯一的命令是“whattimeisit”,它的响应是字符串形式的本地时间
【讨论】:
我不确定我是否理解。数字防火墙的目的(通常)是控制通信通道。如果您想绕过防火墙进行通信,您有两种选择。
在前面的情况下:
您可以将消息传递给传递它们的代理(电子邮件是一个很好但不完全响应的示例)。
如果是后者:
您可以将消息放在其他传输层携带它们的文件中
【讨论】: