与服务器到客户端的查询的持久连接

时间:2011-11-21 09:00:50

标签: c# .net

我有一个由我控制的公司网络和几个封闭的客户网络。我想通过网络中的Web应用程序与客户网络中的数据库进行通信。我的第一个想法是:

  • Web应用程序将查询存储在公司网络的数据库中并等待回答。
  • 客户端网络中的Windows服务每秒通过我们公司网络中的(WCF)Web服务轮询我们的数据库几次。
  • 如果查询可用,Windows服务会在其本地数据库中执行该查询,并将答案存储在公司数据库中。

我一直在考虑删除轮询的想法,而是使用客户网络中的客户端和公司网络中的服务器之间的持久连接。客户端启动连接,然后等待来自服务器的查询。与通过Web服务进行轮询相比,会有什么好处或更糟? WCF会在这里使用吗?

1 个答案:

答案 0 :(得分:0)

你的方法很少:

  • WCF Duplex,一旦Web应用程序将查询存储在数据库中,您就会启动对客户端的调用(在本例中为Windows服务),而不是每隔几秒钟进行一次Windows服务轮询。 net.tcp将是不错的选择,但你仍然可以使用http。
  • 长轮询,不是让你的Windows服务客户端每隔几秒发送一次请求,而是让它发送请求,通道打开,在客户端和WCF服务中设置超时更长时间,让服务器方法循环,检查数据库是否有新通知。找到新通知后,该方法将随之返回。在客户端,一旦收到返回,就向服务器发送另一个请求,然后处理数据。如果发生timeOut错误,请发送另一个请求。只需谷歌长期民意调查你会发现很多。

    关于每隔几秒查询一次数据库,更好的方法是为通知创建一个表,所以不是每隔几秒查询一个带有复杂sql字符串的大表,而是让客户端在一个单独的表中添加通知(在它们之后)完成将它们添加到主表中),因此您的查询将更简单并且占用更少的资源。您可以在通知表中添加直接指针(如Ids)以节省时间。稍后清理通知表..