繁体   English   中英

如何在Web服务器和站点服务器之间建立双向通信?

[英]How to establish 2-way communication between a web server and a site server?

我正在计划使用WCF用C#,ASP.NET编写的SaaS系统,该系统具有两个独立的组件:

  1. 在云中的静态IP Web服务器上将是所有客户端通用的Web应用程序。
  2. 在每个客户办公室内将是另一个应用程序,该应用程序安装在带有IIS的服务器上。

该网站应用显然可以连接到该网站上发布的Web服务。 但这很麻烦-我也希望Web应用程序能够启动与站点应用程序的连接...并且站点服务器不一定必须具有静态IP。 我无法控制这一点,因为将来某个时候我们可能会有数百个客户,并且我们不能通过坚持要求客户拥有具有固定IP的服务器来限制可销售性。

那么,该怎么做呢?

我可以让站点应用程序每分钟左右“登录”网络,以使网络应用程序可以通过“当您在这里时,请执行x,y,z ... ”进行响应,但这似乎非常优雅。 另外,如果我们正在谈论数百个客户,那么我不想被所有这些“嗨!”轰炸我的Web服务器。 消息(如果不是必需的话)。

有没有更好的办法?

WCF? 开始了:

  • 使用基于消息的方法(交换消息,无状态方法调用)。
  • 客户端连接到服务器。 建立基于HTTP的双向连接。 这样,服务器可以回叫连接的客户端。 这是标准的WCF内容,通过.NET框架第4版的NAT可以很好地工作。

在断开连接的情况下,客户端可以重新连接,重新标识自己并获取待处理的消息。

  1. 动态DNS是一种可能,但取决于您的客户/客户。
  2. 如果站点应用程序是由您创建的,则只需在其地址更改(或重新启动站点服务器/ Web应用程序)时与Web服务器联系。 仍然,例如,每30分钟一次保持活跃的心跳。 一小时不是一个坏主意。

编辑:我认为SNMP服务可能会提供答案,但我不是网络专家。 您必须进行一些挖掘或对stackoverflow提出一个单独的问题。

IIRC“推送通信”是通过让客户端执行具有不确定超时的HTTP请求来完成的。 然后服务器在有话要说时做出响应。 响应后,客户端立即发出新请求。

它的工作方式与服务器建立连接的方式相同,并且占用的资源比轮询少得多。

您对彗星技术有何看法?

听起来您肯定在服务器上需要某种注册表,然后如果需要工作,它可能会尝试调出客户端应用程序。

通常,客户端应用程序每隔X秒钟向服务器检入一次-这就是Selenium网格的工作方式。 具有客户注册的中央集线器。 集线器收到运行某些测试的请求时,会将作业传递给客户端以执行。

您可能不需要“签到”。 服务器可以尝试调出已注册的客户端应用程序,直到找到可用的客户端应用程序为止,这样只有服务器需要一个静态地址(可以使用DNS名称而不是IP使其更强大)。

还可以看看XMPP PubSub 这可能是更健壮和标准化的方式来处理此问题。

最后,我决定使用NetTcpBinding,这是@Allon Guralnek 在此处给出的最佳理由。 值得点击阅读他的话...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM