从具有多个用户的IIS下运行的ActiveX DLL调用时,C ++ DLL崩溃

时间:2013-03-07 01:07:28

标签: c++ dll iis-7 vb6 activex

我有一个项目,其中用VB6编写的ActiveX DLL正在调用C ++ DLL。 ActiveX DLL通过ASP“CreateObject”调用通过IIS 7加载。

当只有一个Web用户访问该站点时,一切都很完美(通过数千次迭代测试)。只要有2个或更多并发用户访问该站点,一个或多个用户会话就会崩溃(通常会出现500错误)?

我怀疑这可能是因为C ++ DLL没有正确的线程安全,所以我使用全局互斥来重写它以限制访问。这没有效果。

说实话,因为VB6 ActiveX DLL的每个实例都在一个单线程的公寓中运行,我原本预计这不会成为一个问题吗?

任何人都可以了解这里可能发生的事情吗?我怀疑我并不真正理解当IIS加载VB6 ActiveX DLL的多个实例时会发生什么。

1 个答案:

答案 0 :(得分: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。