2012-05-29 62 views
6

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

这在我们的开发环境中工作正常,但我们在UAT环境中得到这个错误。除UAT更安全外,开发和UAT几乎相同。我尝试了所有可能的方式,但没有运气。我正在处理这个问题过去4天,任何帮助将不胜感激。

我怀疑可能会暴露该dll的IIS 7的权限问题。但不知道它可能是什么?我们也给予了IUSR全部权利。

代码:

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

是否在UAT服务器上注册了.dll,即使用'regsvr32'? – mellamokb

+0

对不起,我忘了提及那部分。是的,使用Regasm在UAT服务器上注册了dll。 – Bugreport

+0

你注册了吗?NET程序集的32位和64位使用?我不知道经典ASP运行的是32位还是64位进程(推测在w3wp.exe下)。请注意,有时对CreateObject的调用可能会自动失败,只有在尝试使用该对象时才会出现错误。我建议你尝试实例化一个Microsoft开发的COM可见的.NET对象,以查看系统是否在原理上工作,然后再查明你的特定实现有什么问题。 – Dai

回答

2

我们有一些COM DLL的在我的工作,我们经常会遇到,我们与regasm注册DLL和DLL不能正常工作的问题。它适用于其他现场环境,但出于某种原因,在这种情况下它不起作用。 Com dlls很善变。有时我们会注册它,取消注册,重新注册并重新启动。有时他们神秘地开始工作而不是其他时间。

还有更多的事情可能会出错。

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

如果失败打开注册表编辑器。搜索与com对象关联的guid。有时你会发现注册表的路径都混在一起。清除对com对象的任何引用,重新引导并重新注册它。

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

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

还要确保如果COM对象是强类型的,你使用“regasm/TLB /代码库fickle_com_object.dll”

总之有几件事情,导致COM对象到不行:

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

也许这些事情之一将解决您的问题。我知道有时候有多困难。祝你好运!