2011-05-17 119 views
0

我們有一個WCF服務方法(同步),它調用另一個進程(通過COM)來執行某些操作。現在這個COM進程需要大約10-15秒才能完成,然後將調用返回給我的服務,然後服務返回給客戶端。超時異常的WCF服務行爲

在WCF客戶端,我們有一個sendtimeout設置爲5秒,所以5秒後我們收到客戶端的超時異常。

現在我的問題是在客戶端收到超時異常之後服務端會發生什麼情況。因爲COM進程的調用仍在進行中,並且可能會在5-10秒後返回服務,所以服務如何處理這種情況。

讓我知道是否需要進一步的輸入。

問候,

回答

0

AFAIK,則拋出異常在客戶端,但是,從操作的服務執行。如果你有長時間的運行操作,你可以檢查出asynchronous calls

更新: 如果這是不可能的,並增加超時是不是由於同樣的原因選項,我看不出如何避免超時異常。一些方法來恢復:

  • 如果您想中止客戶端超時的服務器操作,您可以添加一個服務操作像CancelCOMCall,並從客戶端調用時抓到一個TimeoutException,這將殺死COM進程。

  • 如果您想讓操作完成但防止客戶端的重複調用(由超時後的重試異常引起),則可以保存每個客戶端正在運行的COM操作,並放棄對已經運行的進程的調用。

我同意這兩種方法都非常整潔,但是如果沒有異步調用,看起來有點困難。儘管我不是WCF專家。

+0

嗯,我理解你關於異步調用的觀點,但不幸的是,服務調用不能做成異步(由於我們遵循一些規範/標準)。 – 2011-05-19 07:37:51

+0

更新了我的答案。 – henginy 2011-05-23 07:35:00