2011-01-05 88 views
4

我有一個WCF服務方法需要兩個多小時才能執行(運行一些報告)。我如何確保它不會超時而不考慮所花費的時間?我認爲在WCF配置中有很多超時設置,我不確定哪一個與我有關。對於ASMX webservices,有一個選項可以指定無限超時設置,對於WCF有沒有類似的選項?我是否也需要爲此更改任何IIS設置(WCF服務託管在IIS中),如回收工作進程,空閒超時等?長時間運行WCF服務的設置超時

回答

5

你有沒有考慮過使用回調?您的客戶端發送請求,然後等待服務器發出通知,以便完成時間?這可能需要對客戶進行更改,但通過這種方式,您的服務可以「喋喋不休」並告訴客戶報告何時完成。

幫助:http://idunno.org/archive/2008/05/29/wcf-callbacks-a-beginners-guide.aspx

WCF超時: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/

你也應該考慮在客戶端超時,以及。 (binding.OpenTimeout,ReceiveTimeout,CloseTimeout等)

另一種辦法是舉辦WCF在Windows服務,它可以簡化您的情況,因爲它從公式中刪除IIS:

http://msdn.microsoft.com/en-us/library/ms733069.aspx

或者,使用單向WCF調用怎麼樣?這樣,該呼叫將在發送請求後立即返回給客戶端。

Need sample fire and forget async call to WCF service

+0

是的,我試圖在Windows服務中託管WCF服務,我認爲回調在這種情況下不合適,因爲它是一個長時間運行的任務,用戶不能期望等待這麼長時間才能獲得通知結果。這是一次火災和忘記呼叫,用戶只需檢查網絡上的文件系統,看看是否已創建報告。起初我反對使用Windows服務,因爲安裝和卸載的麻煩,所以我嘗試使用IIS,但它造成超時問題。 – RKP 2011-01-06 10:20:08

+0

如何在WCF中使用單向呼叫? http://stackoverflow.com/questions/774648/need-sample-fire-and-forget-async-call-to-wcf-service – Larsbj 2011-01-06 16:26:12

8

這是濫用網絡服務。不要這樣做。

而是讓Web服務啓動長時間運行的操作,並在單獨的進程中運行。如果客戶需要知道報告何時完成,那麼讓「獨立流程」跟蹤報告的創建並在報告完成時記錄。客戶端可以調用Web服務來檢查該狀態。

你真的不希望依賴於HTTP連接保持打開幾個小時。這是一個網絡。事情發生在網絡上。壞事。

+0

是的,我認爲你是對的,我想在Windows服務中託管WCF服務,看看是否解決了超時問題。 – RKP 2011-01-06 10:22:11

1

考慮創建WCF workflow service(使用WF)來代替。這些特別設計用於處理長時間運行的進程,尤其是在使用持久性時。

+0

感謝您的答覆。這不是一個工作流程,它只是一個需要很長時間才能執行的任務,所以使用WF可能是一個矯枉過正的工作。 – RKP 2011-01-06 10:23:42