我正在计划一个SaaS系统,用C#编写,ASP.NET使用WCF,它有两个独立的组件:
网站应用程序显然可以连接到网站上发布的网络服务。但这就是问题 - 我还希望网络应用程序能够启动与站点应用程序的连接......并且现场服务器可能不一定具有静态IP。我无法控制这一点,因为我们将来可能会有数百个客户,我们不能通过坚持客户拥有固定IP的服务器来限制我们的销售能力。
那么,怎么做呢?
我可以让网站应用程序每隔一分钟“检入”一次,让网络应用程序有可能回复“当你在这里时,请做 x,y,z。 .. “但这似乎非常不优雅。此外,如果我们谈论数百个客户,我不想用所有这些“嗨那里”轰炸我的网络服务器!消息,如果它们实际上不是必需的。
有更好的方法吗?
答案 0 :(得分:3)
WCF?我们走了:
瞧。如果断开连接,客户端可以重新连接,重新识别自己并获取待处理的消息。
答案 1 :(得分:1)
编辑:我认为SNMP服务可能提供答案,但我不是网络专家。你必须在stackoverflow上做一些挖掘或问一个单独的问题。
答案 2 :(得分:1)
IIRC“推送通信”是通过让客户端执行具有不确定超时的HTTP请求来完成的。然后服务器在他有话要说时回应。在做出响应后,客户立即提出新请求。
它的运行方式与服务器建立连接的方式相同,并且比轮询使用的资源少得多。
答案 3 :(得分:0)
您对Comet技术有什么看法?
答案 4 :(得分:0)
听起来你肯定需要在服务器上使用某种注册表,如果它需要工作,它可能会尝试调用客户端应用程序。
通常,客户端应用程序每X秒检查一次服务器 - 这就是Selenium grid的工作方式。有一个中心枢纽,客户注册。当集线器收到运行某些测试的请求时,它会将作业传递给客户端以执行。
您可能不需要“登记入住”。服务器可能只是尝试呼叫已注册的客户端应用程序,直到找到可用的应用程序。这样只有服务器才需要静态地址(可以使用DNS名称而不是IP来使其更加健壮)。
另请查看XMPP PubSub。这可能是一种更强大和标准化的方法来处理这个问题。
答案 5 :(得分:0)
最后我决定使用NetTcpBinding,原因是@Allon Guralnek here给出的最佳理由。值得点击并阅读他要说的内容......