2011-07-18 43 views
1

網站的bin文件夾中有一個.dll文件,其中有一個多線程方法。 它是一個相當快的過程,(半秒)所以超時不是問題。IIS 7上的奇怪的多線程問題

在我們的開發IIS 7上,它運行順暢。所有的程序員機器都一樣。然而,在生產IIS7,它未能啓動參數線程 這裏的代碼行:

ParameterizedThreadStart start = new ParameterizedThreadStart(queryDb); 
Thread thrd = new Thread(start); 
thrd.Start(ndb); 

它相當標準的東西。我的問題是,是否有人知道IIS7中的任何東西會阻止它產生線程,如上所述

+3

你在生產機器上遇到什麼樣的錯誤? – Icemanind

+0

我沒有收到錯誤。這就是問題,在這一點上什麼都不是,繼續下去。我檢查了事件日誌和WC3日誌。另外,如果數據庫連接失敗,我將所有嘗試捕獲記錄到具有本地文本文件的數據庫作爲回退。我在任何地方都沒有收到任何錯誤。該線程只是無法啓動。但開發機器和程序員電腦上的完全相同的代碼運行良好。 fwiw,我比較了使用.NET Reflector的dev和prod機器上的代碼,以確保在那裏沒有發生奇怪的事情,它在兩臺機器上都相同 – edepperson

回答

0

Potetnial原因:如果您沒有正確關閉舊線程並擁有32位計算機,您很快就會用盡地址空間爲新線程分配堆棧。

注意:考慮使用線程池(即QueueWorkItem http://msdn.microsoft.com/en-us/library/kbf0f1ct.aspx)執行一個關閉任務。或者考慮使用異步頁面,如果處理實際上是頁面渲染的一部分(而不是等待線程完成)。

+0

它是一個64位的Windows 7機器。我想過使用線程池,但它不是一個火線和忘記線程。我有一個需要設置的等待句柄,所以剩下的代碼可以處理。 – edepperson

0

另一個潛在的原因是:代碼需要完全信任,這是您在本地測試中獲得的,而不是在服務器上。你使用任何安全關鍵或不安全的代碼?

+0

此模塊中沒有不安全或安全關鍵的代碼。它所有的直接.net,簡單的數據庫調用,我把一些日誌記錄在線程調用的方法,在一開始,在其他任何事情完成之前,它從來沒有做過。它調用的方法在同一個類中,所以身份驗證不應該成爲問題,它只是簡單地不啓動線程。 – edepperson