2010-09-20 36 views
2

我有一個win窗體客戶端訪問一個長時間運行的wcf服務。該服務公開了訂閱和取消訂閱方法。當客戶端調用subscribe方法時,服務會爲其生成新的guid並獲取當前的回調上下文,並將該guid和回調上下文保存在客戶機字典中並返回Guid。根據用戶請求,客戶端使用此GUID調用服務以啓動長操作。一旦服務完成操作,它就會給客戶端回叫。客戶端然後從服務中檢索處理的數據。在wcf服務回調無效

我得到有時做一個回調時的錯誤是

「的操作OnServiceCallback」無法完成,因爲會話通道超時等待接收的消息。要增加超時,請在配置文件中的綁定上設置receiveTimeout屬性,或者直接在綁定上設置ReceiveTimeout屬性。

我無法理解的部分是這種情況非常不一致。大多數情況下,客戶端和服務運行一段時間後纔會發生這種情況。

我是wcf服務的初學者,歡迎提出任何建議來解決這個錯誤。

回答

0

我能夠通過做一些很好的舊試驗和錯誤來找出錯誤的答案。回調失敗,因爲我試圖使用的OperationContext.Current對象爲null。這是因爲我試圖訪問與服務線程不同的線程上的OperationContext.Current對象。因此,爲了解決這個問題,我現在正在訪問服務線程中的OperationContext.Current對象,然後將callbackContext作爲參數傳遞給實際需要使用它的外部處理邏輯。

0

綁定具有名爲receiveTimeout的屬性。該屬性默認設置爲10分鐘。它定義了服務實例在終止之前等待下一個請求的時間。因此,如果客戶端和服務之間在10分鐘內沒有活動,則服務實例將關閉,客戶端將無法再使用它。在雙面服務中,雙面服務可能會更復雜,因爲雙方都有服務。您可能需要在兩端都配置receiveTimeout。