从 ASP 调用 MTS COM 组件时服务器执行失败

本文可帮助你解决从 Active Server Pages (ASP) 调用 Microsoft 事务服务器 (MTS) 组件对象模型 (COM) 组件时服务器执行失败的问题

原始产品版本: Internet Information Services
原始 KB 数: 241057

现象

从 ASP 调用 MTS 包的 COM 组件时,可能会间歇性地发生以下错误:

服务器对象错误“ASP 0177 : 80080005”
Server.CreateObject 失败
/xxxx.asp,第 xx 行
服务器执行失败

此错误消息与以下类似的事件日志条目关联:

EventID:4134
源:事务服务器
类型错误:
类别:执行
从对象上下文创建失败:CoGetClassObject (ProgId: xxxx.xxxx) (CLSID: {B57CF3F7-66D3-496A-9D3B-55AE65A952FB}) (接口: IClassFactory) IID: {00000001-0000-0000-C000-0000000000046}) (Microsoft 事务服务器内部信息: 文件: d:\viper\src\runtime\context\ccontext.cpp, 行:1285)
数据(单词):
0000: 80080005

或者,使用 CreateObject 方法而不是 Server.CreateObject ASP 创建组件时,可能会出现以下错误:

Microsoft VBScript 运行时错误“800a01ad”
ActiveX 组件无法创建对象:“xxxx.xxxx”
/ron/InvPerfStress.asp,第 14 行

原因

当 MTS 服务器包的标识已设置为 Interactive User时,将发生这种情况。 交互式用户是当前登录到服务器的用户(即承载 MTS 包的计算机)。 当用户注销时,无法创建和执行 MTS 服务器包中的组件,并返回错误。

重现行为的步骤

  1. 创建新的 MTS 服务器包并接受默认的交互式用户标识。

  2. 将 COM 组件添加到此包。

  3. 创建 ASP 页并将其保存在虚拟目录中。

  4. 登录到服务器时,从其他计算机上的浏览器请求 ASP 页面。

  5. 从服务器注销

  6. 从其他计算机上的浏览器再次请求 ASP 页面(或刷新步骤 4 中请求的页面)。

  7. 如果使用以下组件创建 Server.CreateObject组件,则会在浏览器中显示以下错误:

    服务器对象错误“ASP 0177 : 80080005”
    Server.CreateObject 失败
    /xxxx.asp,第 xx 行
    服务器执行失败

  8. 登录到服务器并打开 Internet Service Manager,将 MTS 服务器包的标识更改为特定用户。

  9. 再次从服务器注销。

  10. 从其他计算机上的浏览器再次请求 ASP 页面(或刷新步骤 4 中请求的页面)。

  11. 页面按预期工作。

解决方法

将包标识设置为特定用户。

Status

此行为是设计使然。