WCF双向HTTP通信绕过防火墙

WCF双向HTTP通信绕过防火墙,wcf,firewall,duplex,Wcf,Firewall,Duplex,我想使用WCF在不打开客户端端口的情况下启用双向通信 我正在开发类似于P2P应用程序(类似于teamviewer/logmein)的东西,您不需要打开端口进行通信 如何通过HTTP/HTTPS实现双向通信,而无需在客户端打开端口 注意:端口80可以在服务器中打开…没有问题 谢谢我不太明白。数字防火墙的目的(通常)是控制通信信道。如果您想绕过防火墙进行通信,有两种选择 将消息隐藏在防火墙允许的内容中 使用防火墙无法控制的通信通道 在较早的情况下: 您可以将消息传递给传递消息的代理(电子邮件是一个很

我想使用WCF在不打开客户端端口的情况下启用双向通信

我正在开发类似于P2P应用程序(类似于teamviewer/logmein)的东西,您不需要打开端口进行通信

如何通过HTTP/HTTPS实现双向通信,而无需在客户端打开端口

注意:端口80可以在服务器中打开…没有问题


谢谢

我不太明白。数字防火墙的目的(通常)是控制通信信道。如果您想绕过防火墙进行通信,有两种选择

  • 将消息隐藏在防火墙允许的内容中
  • 使用防火墙无法控制的通信通道
  • 在较早的情况下:

    您可以将消息传递给传递消息的代理(电子邮件是一个很好但不完全响应的示例)

    对于后者:


    您可以将消息放在某个其他传输层承载它们的文件中,您提到的系统工作如下。他们首先试图让客户端A和客户端B通过一系列不同的拓扑直接通信,这些拓扑基本上要求其中一个允许进入的连接,如果失败的话,它们会退回到充当中间人的第三方。因此,客户机A与服务器对话,并为客户机B发送消息。然后,客户机A获得发往服务器的消息作为响应。客户端B将其消息发送到服务器,它从服务器从客户端A获取消息。这样,客户端A和B都会启动连接,而不需要为传入流量打开端口

    如果我对你的情况理解正确,你总是希望那个人在中间。为了做到这一点,您必须编写一个提供所有相关方法的WCF服务。比如说

    • void SendMessageToClient(Guid senderId、Guid recipientId、Message msg)
    • 消息[]GetMessages(Guid recipientId)
    然后让这些方法分别从某个地方(比如数据库、队列等)存储和检索这些消息对象

    然后编写一个客户端,使用HTTP绑定连接到WCF服务,并调用服务器上的方法并处理结果

    我希望你能理解

    • a)这不是一种非常有效的沟通方式
    • b)测试、调试和理解正在发生的事情是很困难的,因为涉及的各方太多,而且通信是异步的,存在于3个不同的进程中
    • c)它在通信上增加了一个额外的层,因此当您处理基础设施位以及处理实际协议时,您需要在头脑中清楚地知道(最好是在代码中)
    伪(代码)示例

    在本例中,我假设消息对象只是一个字符串,唯一的命令是“whattimeit”,响应是字符串形式的本地时间

    • ClientA调用server.SendMessageToClient(“ClientA”、“clientB”、“whattimeisit”)
    • 服务器将此消息存储在ID为1的数据库中
    • ClientB调用服务器GetMessages(“ClientB”)
    • 服务器检索ID为1的邮件
    • 客户B收到“Whattimeiit”作为回应
    • ClientB调用server.SendMessageToClient(“ClientB”、“clientA”、“19:50:12”)
    • 服务器将此消息存储在ID为2的数据库中
    • ClientA调用服务器GetMessages(“ClientA”)
    • 服务器检索ID为2的邮件
    • ClientA收到回复“19:50:12”

    换句话说,我正在尝试通过任何一个端口进行传输。我无法让用户在客户端进行端口转发并打开端口以接收传入连接。您好,在您的伪代码中…请参阅“ClientB调用服务器GetMessages(“ClientB”);”…如果我使用计时器进行此操作,它将在我的服务器上消耗大量带宽,对吗?拓扑结构和一切都是绝对正确的。这就是我需要的。但是,我需要在现实世界中实现这一点,因此,我认为实现这一点的方法是让客户端连接到服务器并保持会话打开。让服务器通过同一个会话调用客户机上的方法…还有其他方法吗?(我不能使用计时器,因为多个客户端这样做会消耗我服务器的所有互联网带宽)就带宽而言。使用的带宽主要取决于消息对象的大小。更大的压力将是并发连接的数量,这取决于相似客户端的数量。WCF的可扩展性非常好,您应该能够每秒处理请求分配,如果需要,您可以添加额外的服务器,它们不再那么昂贵了。我不知道您想要进行什么类型的通信,以及每个客户/每个时间段的需求数量的高/低。是的,您也可以使用您描述的双工绑定。