0

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

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

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

老实说,因为 VB6 ActiveX DLL 的每个实例都在单线程单元中运行,所以我本来希望这不是问题?

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

4

1 回答 1

0

ActiveX DLL 可以是单线程模型或单线程单元模型: 单线程

公寓螺纹

您是否编写了 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。

于 2013-03-07T15:45:47.230 回答