2011-04-29 94 views
4

當談到客戶端/服務器應用程序時,我是一名新手。 (我只編程的asp.net應用程序).NET WCF - 服務器正在處理時更新客戶端GUI

我想創建一個應用程序,其中包含多個WinForm客戶端和一個.NET服務器(我正在考慮WCF)的 客戶端和服務器之間的通信應該在http(端口80)上。

應用場景:

客戶將關鍵字傳遞給服務器,例如「圖書」。

然後,服務器將根據此關鍵字開始1秒 - 10分鐘的搜索匹配數據處理。

服務器將查找結果列表(從1結果到N結果)。

我希望客戶端在服務器正在搜索時用發現的結果更新GUI。 (不要等到服務器完成後)。

我的問題是:

WCF是針對服務器端的正確選擇?

什麼樣的WCF協議?基於MSMQ的雙面打印,輪詢?

相關示例代碼,初學者工具包等的任何鏈接,歡迎:)

回答

1

如果您使用WCF,MSMQ將是傳輸層(「綁定」使用WCF術語),並沒有真正給你想在這裏做什麼相關的(你會NetMsmqBindingWsHttpBinding VS之間進行選擇NetTcpBinding,僅舉幾例)。您可以使用輪詢或雙工綁定,也可以完全有效,但實現方式會有很大不同。

要實施輪詢方法,我會建議使用基於會話的WCF服務。只要您持有代理到您的客戶端中的WCF服務,您的會話就會持續下去,並且您將繼續使用該代理來獲取請求的更新,直到它最終以狀態「已完成」返回。這對客戶和服務來說似乎相當簡單。

使用雙工服務也是一種有效的方法,但如果您從未使用過WCF,實施起來可能會更加複雜。通過雙工服務,在您的ServiceContract的定義中,您可以定義一個CallbackContract,這是您的服務用於將消息發送回客戶端的另一個ServiceContract。在你的情況下,我認爲你需要在你的CallbackContract中進行兩個不同的操作,一個用來報告每個結果,另一個用來指示所有結果已被檢索,以便你的客戶知道不會有任何更多結果並關閉該通道。 The MSDN documentation on Duplex services是相當徹底的,但WCF肯定有一點學習曲線。

+0

感謝您的好解釋,您會推薦使用Duplex還是Polling? ,任何主要的性能優勢?我看到這篇文章http://stackoverflow.com/questions/1949427/effective-pattern-for-getting-progress-info-about-a-method-that-takes-a-long-time(Bryan Batchelder),談論實現投票的方式看起來很複雜。也許你知道我在哪裏可以找到這個長投票的任何代碼示例? – RuSh 2011-04-30 10:34:36

0

因爲我只是把它刺傷我只是給你這個指針開始尋找。

使用Stream作爲返回類型,並在每次通過記錄搜索時執行返回收益時使用IEnumerable。如果您將每個記錄手動序列化爲JSON,則可以將數據轉儲到Stream中。

客戶端的一個潛在示例是嘗試並使用流式Twitter API(http://dev.twitter.com/pages/streaming_api),這將允許您測試客戶端與Stream一起工作並驗證您的概念驗證的後端,然後再開始服務器端。