2013-03-07 41 views
0

我有一個項目,其中用VB6編寫的ActiveX DLL調用C++ DLL。 ActiveX DLL通過ASP「CreateObject」調用通過IIS 7加載。C + + DLL崩潰時從DLL下運行IIS與Multpile用戶調用用戶

當只有一個網絡用戶訪問該網站時(通過數千次迭代測試),一切正常工作。只要有2個或更多併發用戶訪問該站點,一個或多個用戶會話就會崩潰(通常有500個錯誤)?

我懷疑這可能是由於C++ DLL沒有正確的線程安全,所以我使用全局互斥來重寫它以限制訪問。這沒有效果。

說實話,因爲VB6 ActiveX DLL的每個實例都在單線程的公寓中運行,所以我預計這不會成爲問題嗎?

任何人都可以瞭解可能發生的事情嗎?我懷疑我不確切知道當IIS加載VB6 ActiveX DLL的多個實例時會發生什麼。

回答

0

的ActiveX DLL文件可能是單線程模式或者單線程單元模式: Single Threaded

Apartment Threaded

你寫的ActiveX DLL?你能確定它的線程模型嗎?

此外,您可能要啓用調試,看看是否可以在Visual Studio中捕獲一個錯誤:http://www.falconwebtech.com/post/2010/12/28/Debugging-Classic-ASP-in-IIS7-and-VS2010.aspx

當調試啓用ASP被限制在單線程方式處理一次一個請求。所以,如果在調試時沒有發生錯誤,那麼ActiveX DLL很可能是單線程的,而不是單元線程的。

另外,你知道設置AspExecuteInMTA嗎?您可能想要檢查它是否被無意地設置爲true。

+0

感謝您的及時回覆。 >你寫了ActiveX DLL嗎?你能確定它的線程模型嗎? 我沒有寫ActiveX DLL,但我有權訪問源代碼。它使用公寓線程。 – Rat 2013-03-08 03:32:57

+0

>另外,您可能需要啓用調試以查看是否可以在Visual Studio中捕獲錯誤:http://www.falconwebtech.com/post/2010/12/28/Debugging-Classic-ASP-in-IIS7 -and-VS2010.aspx >啓用調試時,ASP限於一次以單線程方式處理一個請求。所以,如果在調試時沒有發生錯誤,那麼ActiveX DLL很可能是單線程的,而不是單元線程的。 我一直在運行VB6調試器,但到目前爲止一直無法隔離這個問題。 – Rat 2013-03-08 03:33:31

+0

>另外,你知道設置AspExecuteInMTA嗎?您可能想要檢查它是否被無意地設置爲true。 這設置爲false。在這裏可能有另一個IIS配置設置的錯誤? – Rat 2013-03-08 03:34:05