2009-02-25 82 views
1

我正在寫一個應用程序使用WCF客戶端訂閱服務器,然後更新被推回到客戶端。WCF中的調用是否同步?

訂閱服務器使用調用Subscribe()方法的DuplexPipeChannel訂閱服務器。

服務器維護訂戶的列表,當有數據推送給訂戶時,它調用PushData()方法。

我的意圖是遍歷訂閱者列表,依次調用每個訂閱者的推送方法。

我想知道的是:是否在我的訂閱服務器阻止上調用推送方法?連接失敗或延遲連接到其中一個用戶會導致其他推送呼叫延遲(或更糟)失敗?

對不起,如果這是一個明顯的問題,但我到目前爲止主要是.Net 2.0人,所以我對WCF知之甚少。

我的WCF代碼鬆散地基於this tutorial

另一個問題 假設它是同步的,是我最好產生一個新的線程來處理客戶端的請求,或者我會好起來產生一個新的線程爲每個「推服務器端?」

回答

4

默認情況下,WCF調用是同步的,儘管它們可以配置爲異步。請參閱下面的Jarrett的回答。看看here。無論您是否真的在期待數據,您發送的每封郵件都會收到結果。

該呼叫將根據您的服務器的功能進行阻止。如果服務器上的PushData實際遍歷訂閱者列表並向每個訂閱者列表發送消息,它將會執行。如果PushData僅插入數據,而另一個線程處理將數據發送給訂閱者,它將僅在服務器插入數據並返回時阻止。

希望這會有所幫助。

編輯:關於產卵線程客戶端與服務器端。服務器端。如果客戶端調用需要一段時間,那麼,但如果服務器實際上在同一個調用中向其他客戶端發送呼叫需要很長時間,則會出現問題。我實際上並不是每次都會產生一個新的線程。只需在服務器端創建一個producer/consumer模式,以便每當數據項排入隊列時,消費者就會選擇它。地獄,你甚至可以有多個消費者。

3

如果右鍵單擊服務引用,則可以選擇創建異步調用。 (在設置對話框中有一個複選框。)我通常創建Async方法,然後監聽結果。雖然這有點多,但我可以使用異步服務操作編寫響應速度更快的應用程序。

+0

我已更新我的回覆以包含此信息。 +1 – 2009-02-25 15:16:11