很难解释我们的处境。
我们有一个 3 层应用程序。该引擎是一个用 C++ 编码的 DLL,然后我们有一个通过 API 调用访问引擎的 VB6 ActiveX EXE,在顶层我们有一个 Excel 插件(在 C# 中使用 VSTO 框架)调用中间层与一个互操作 DLL . 此时,从插件到引擎的每个“连接”都会创建一个新的 EXE(VB6 使用 API 调用来访问引擎)并且一切正常。现在我们将中间层移动到 .NET,它“可能”工作得很好(它通过了我们所有的单元测试)但是,当我们同时打开 2 个“连接”时我们发现了一个错误(ups,没有单元测试检查这种情况因为这是一种新的行为)。DLL 具有静态对象,它在同一进程中的所有实例上共享,并且我们在“连接”之间进行交互。在我们的旧版本中,每个“连接”
按照这个问题的提示。我们尝试在 C# 中构建一个 COM EXE 以在中间层执行进程外对象,但结果相同。它们共享静态对象,最后,每个连接都不会创建一个独立的进程。
将 API 调用移动到 ATL 或将静态对象更改为具有句柄的可实例化引用并更改所有 API 调用以获取/设置此处理程序,这很清楚,但目前无法负担得起。我查看了MS All-in-one 中的所有示例,但没有找到任何解决方案。一次只保留一个连接也不可能,每个工作簿都可以有一个连接,并且将来我们希望探索同时具有多个连接的 Web 应用程序。
有什么建议吗?
提前致谢,