2013-03-07 66 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