1

14 年前,当我还是个新手时,为经典 ASP 设置组件不在我的薪酬等级中……然而,现在,我回到了未来,我发现自己不得不针对经典 ASP 项目进行维护和编码使用 COM 对象。

现在,我发现自己正在查看 1999 年至 2001 年的古代文章,我想知道是否有人对为什么 COM (ActiveX .dll) 应该设置无人值守执行和保留在内存中的原因有一个很好的答案?

我还应该注意,该站点的当前架构是这些刚刚放在服务器上的 .dll(当然是注册的)。我想知道 COM+ 和 MTS。我们现在坚持使用经典的 ASP(长话短说)。但是,我希望尽快迁移到 .NET。因此,如果我可以最大限度地减少当前架构的维护时间,那将很有帮助。您能否也给我一个为什么我们应该使用 COM+ 和 MTS 的理由?以及添加这些功能所涉及的内容。

4

1 回答 1

5

无人值守执行可防止您的 VB6 二进制文件显示交互式对话框,即您的 Web 客户端无法看到或与之交互的服务器上的窗口。

这可能是 Msgbox() 或运行时错误弹出窗口。标记无人参与执行时,运行时错误将记录到 Windows 事件日志中。

保留在内存中可防止 IIS(或您的主机)立即释放您的 DLL。根据您的主机设置,DLL 将保留在内存中并重复使用。一些主机(如 IIS)会在一段时间后释放 DLL。

另请参阅:您可以在最新版本的 Msvbvm60.dll 中配置 Unattended Execution 选项和 Retained In Memory 选项

您必须在编译前打开 Unattended Execution 选项和 Retained In Memory 选项,以便在多线程环境中托管 Microsoft Visual Basic Enterprise Edition for Windows 6.0 组件 (Microsoft ActiveX DLL),例如 Microsoft Transaction Server (Mtx.exe) 、Internet 信息服务 (Inetinfo.exe)、COM+ (Dllhost.exe) 和 Microsoft SQL Server 7.0 或 SQL Server 2000 (Sqlservr.exe)。但是,您可能不知道组件是否会在这样的环境中使用,或者您可能忘记打开无人参与执行选项和保留在内存中选项。为了解决这个问题,最新版本的 Visual Basic 运行时 (Msvbvm60.

并且:Visual Basic 6.0 ActiveX 组件的线程问题

  • MSVBVM60.DLL 内部访问冲突。
  • 客户端进入死锁状态。如果 Visual Basic ActiveX DLL 承载在多线程环境(例如 IIS、MTS 或多线程客户端)中,并且未启用 Retain In Memory 选项,您可能会看到这两种症状。

当然还有:Visual Basic 参考常规选项卡(项目属性对话框)

无人参与的执行 表示项目旨在在没有用户交互的情况下运行。无人值守的项目没有界面元素。任何运行时功能(例如通常会导致用户交互的消息)都将写入事件日志。

Retained in Memory将项目保留在内存中。但是,存在性能成本:保留在内存中的项目在进程终止之前不会被卸载。

于 2011-04-18T22:29:29.510 回答