2011-06-23 74 views
0

我有一個asp.net web應用程序。它通過WCF與業務層進行通信。有一個功能需要一個多小時才能完成。這是一個通常的同步呼叫。 爲了測試目的,Thread.Sleep被用於業務層(服務)來重現此功能。ASP.NET超時設置(IE和Chrome)

System.Threading.Thread.Sleep(4200000); 

我使用Visual Studio 2005 dev env(不是IIS)測試它。當我使用Chrome瀏覽器進行測試時,即使在一小時後也可以等待。但是當我使用IE6進行測試時,它會在一小時後正好註銷應用程序,並導航到我們的登錄頁面。

有關我應該做什麼設置甚至在1小時後不會退出IE的任何想法?

注意:該功能僅在一個月內由管理員使用一次。所以花兩個小時對我們來說沒問題。 [爲管理員創建類似Windows應用程序的內容可能是理想的。但我們現在無法想到這一點。]。此外,我們不能創建任何其他Ajax呼叫或雙工服務 - 這些事情是客戶端不允許的。所以唯一的解決方案是改變設置IE瀏覽器(無論是在IE或ASP.NET)

注意:WCF是自我託管的測試。這是WCF中的NetTCPBinding。

感謝

Lijo

+3

我建議避免像這樣設計的建議。運行異步執行更加健壯,將結果保存到數據庫,然後根據需要顯示結果。 –

+0

假設它不是一個必須經常調用的函數(或者至少我希望如此),只使用IE6以外的瀏覽器不是這個特定功能的選項嗎? – thekip

+1

我同意Alex.There長時間運行HTTP請求沒有意義。在大多數環境中,如果不是瀏覽器,則網絡上的路由器/交換機可能會超時HTTP連接。 – VinayC

回答

0

添加到您的Web.config中增加時間的會話保持活躍的量:

<configuration> 
<system.web> 
    <sessionState mode="SQLServer" sqlConnectionString="Data Source=vls.dev.videolibraryserver.com;User Id=sa;Password=test;" timeout="300" /> 
</system.web> 
</configuration> 

注:更改超時值

然後編寫一個ajax控件來輪詢WCF服務,當它完成後重新加載頁面。

0

如果你有對WCF服務的控制,那麼我建議你重構你的代碼。

讓這樣一個長時間運行的進程同步發生並不是一個好習慣。

如果您知道需要很長時間並且不擔心結果,您可以使用OneWay服務,那麼您的客戶端無需等待回覆。

如果你寫了一個雙工服務,那麼你的客戶端可能仍然會這麼長時間,因爲它不會得到回調。

另一種解決方案是使用單向服務,然後創建另一個服務,民意調查,看看是否操作完成後,由Pete2k