2011-11-21 118 views
0

永久连接我有我的控制下的企业网络和一对夫妇封闭的客户网络。我想从网络中的Web应用程序与客户网络内的数据库进行通信。我的第一个想法是:从服务器查询客户端

  • Web应用程序将查询存储在公司网络的数据库中并等待答案。
  • 客户端网络投票我们的数据库里面的Windows服务,第二个通过(WCF)Web服务也是我们公司的网络几次每次。
  • 如果查询可在它的本地数据库和存储在公司数据库的答案Windows服务执行。

我一直在考虑删除轮询的想法,而是使用客户网络中的客户端和公司网络中的服务器之间的持久连接。客户端启动连接,然后等待来自服务器的查询。与通过网络服务进行投票相比,哪个更好或更差? WCF是否适合在这里使用?

+0

我想永久连接(始终)不是WCF物尽其用。 WCF更多地沿着“开放,使用,关闭”的方向发展。 – Tim

回答

0

你有几种方法:

  • WCF双面打印,一旦应用商店数据库中查询时,您启动而不是使窗口服务轮询给客户的电话(在这种情况下,Windows服务)每隔几秒钟。 net.tcp将是不错的选择,但你仍然可以使用http。
  • 长轮询,而是让你的Windows服务的客户端发送一个请求每隔几秒钟,让它发送请求,通道是打开的,在设置客户端和WCF服务的超时更长的时间,让服务器的方法循环和检查数据库是否有新的通知。一旦找到新的通知,该方法就会返回。在客户端,一旦你得到一个返回,就向服务器发送另一个请求,然后处理这些数据。如果发生timeOut错误,请发送另一个请求。只是谷歌长期投票你会发现很多。

    关于查询数据库每隔几秒钟,更好的办法将作出一个表的通知,因此,而不是查询一个大表与复杂的SQL字符串,每隔几秒钟就可以让客户端添加在一个单独的表的通知(在他们完成添加主表之后),所以你的查询将会简单得多并且占用更少的资源。您可以在通知表中添加直接指针(如Ids)以节省时间。后来清理通知表..
+0

客户端无法接收任何连接。 我喜欢长时间投票的想法。我的第一个投票想法已被使用。使用长轮询代替它并不需要太多。谢谢! –

+0

它需要稍作更改,将db qury放入循环中,在循环中使用Thread.Sleep(int ms),以便不超载db。使超时时间更长。一旦它返回,让客户端请求回该方法..并且你很好去:) – 2011-11-21 14:32:43