2010-12-18 79 views
6

有一個長時間運行的異步線程的WCF服務。 這種長時間運行的運行時間可能會超過1天。 我們在IIS 6WCF中的長時間運行的異步線程

線程運行OK託管WCF服務,但在20分鐘內,我們收到錯誤消息:
「線程已被中止」

線程是死定了結果。

我們的WCF服務配置:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)

您能否提供這個問題的根源?

謝謝你的回答。

回答

9

如果沒有活動(無請求)到此Web服務,IIS可能會決定卸載應用程序域,這當然會導致所有線程被終止。默認值是20分鐘,可以在IIS中的應用程序池的屬性中配置。還有其他一些可能導致應用程序池被回收的因素,比如系統在低內存上運行。所以在IIS中託管這樣的東西可能不可靠。您可以考慮在Windows服務中託管長時間運行的任務。

+0

@Artur,請檢查應用程序池的設置,儘管我強烈建議您使用Windows Services進行此類任務。 – 2010-12-18 10:38:29

+2

謝謝。我認爲我們應該將其託管在Windows服務中。 – 2010-12-18 10:39:15

7

IIS6有一個設置,在沒有請求的預定義時間後關閉應用程序池,默認值爲20分鐘。這似乎就是你所遇到的。您可以在「應用程序池屬性」=>「性能選項卡」=>「刪除空閒後關閉工作進程」中的複選標記下找到此設置。

通常,在IIS下託管長時間運行的任務被認爲是一個壞主意,因爲有很多事情可能會中止線程或完全關閉該進程。應用程序池回收是最突出的一個。

+0

謝謝@driis給你評論。 – 2010-12-18 10:41:30

2

您可以讓Windows服務主機成爲啓動長時間運行任務的WCF端點。 Windows服務意味着要運行很長很長時間,並且非常適合這種情況。