【问题标题】:error '80131509' in ASP PageASP 页中的错误“80131509”
【发布时间】:2026-01-09 15:05:01
【问题描述】:

我们创建了一个 .Net 程序集并使其可作为 COM 对象访问。当我们试图在 ASP 页面中公开此对象的任何方法时,我们会收到错误“80131509”。我们在实例化对象时没有收到任何错误。即 Server.CreateObject 正在通过。

这在我们的开发环境中运行良好,但在 UAT 环境中出现此错误。开发和 UAT 几乎相同,只是 UAT 更安全。我已经尝试了所有可能的方法,但没有运气。在过去的 4 天里,我一直在处理这个问题,我们将不胜感激。

我怀疑 IIS 7 在公开该 dll 时可能存在一些权限问题。但不确定它可以是什么?我们也赋予了IUSR 的全部权利。

代码:

set obj = Server.CreateObject("DataAccess")
dim rs
set rs=obj.GetLocations("All") <--- **Here i am getting an error.**

【问题讨论】:

  • .dll是否注册在UAT服务器上,即regsvr32?
  • 对不起,我忘了提到那部分。是的 dll 是使用 Regasm 在 UAT 服务器上注册的。
  • 您是否注册了 .NET 程序集以供 32 位和 64 位使用?我不知道 Classic ASP 是作为 32 位还是 64 位进程运行的(大概在 w3wp.exe 下)。请注意,有时对 CreateObject 的调用可能会静默失败,您只会在尝试使用该对象时收到错误消息。我建议您先尝试实例化一个 Microsoft 开发的 COM 可见 .NET 对象,以查看系统是否在原则上工作,然后再找出您的特定实现有什么问题。
  • 你检查过这个链接了吗? *.com/questions/1281052/…

标签: iis-7 asp-classic


【解决方案1】:

我们有几个 com dll 在我的工作中,我们经常遇到问题,我们使用 regasm 注册 dll 并且 dll 不起作用。它可以在其他实时环境中使用,但由于某种原因,它在这种情况下不起作用。 Com dll 变化无常。有时我们会注册它,取消注册它,重新注册它,然后重新启动。有时他们会神秘地开始工作,有时则不会。

还有更多可能出错的地方。

确保在 dll 所在的文件夹和 dll 本身上设置了正确的权限。还要确保存在任何依赖的 dll 并且具有正确的权限。确保 dll 需要访问的所有内容也具有正确的权限。

如果失败打开注册表。搜索与 com 对象关联的 guid。有时您会发现注册表的路径都混淆了。清除对 com 对象的所有引用,重新启动并重新注册它。

我还看到构造函数中抛出异常导致问题。当 com 对象启动时,它会爆炸。在我们的一个对象中添加了一个在发生异常时发送电子邮件的方法。

在一种情况下,我们有一个旧的 com 对象,它不再与我们正在运行的 Windows 版本兼容。如果您已经升级了它所在的服务器,则可能是问题所在。在我们的例子中,我们编写了自己的组件来替换损坏的旧组件。

还要确保如果 com 对象是强类型,则使用“regasm /tlb /codebase fickle_com_object.dll”

简而言之,有几件事会导致 com 对象无法工作:

  1. 注册表中的多个路径
  2. 文件夹的安全权限错误
  3. 创建时崩溃

也许其中一件可以解决您的问题。我知道有时会很困难。祝你好运!

【讨论】: