2011-11-21 107 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