Server.CreateObject在经典ASP中失败

时间:2011-11-25 12:22:20

标签: asp.net asp-classic

我创建了ASP.NET dll,其中包含一个我需要在Classic ASP页面中使用的函数。

我使用下面的代码在经典asp页面中创建对象

set PeopleSoft = server.createobject("OPS.PSL")

执行

时出现以下错误
Server object error 'ASP 0177 : 80070002' 

Server.CreateObject Failed 

我在stackoverflow中搜索了一些解决方案。通过启用“使程序集COM可见”和“注册COM互操作”。

请帮我解决这个问题

8 个答案:

答案 0 :(得分:3)

您必须先注册您的DLL,如果问题仍然存在,请执行以下操作:

  • 找到并单击以下注册表子项: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_IGNORE_ZONES_INITIALIZATION_FAILURE_KB945701
  • 注意如果FEATURE_IGNORE_ZONES_INITIALIZATION_FAILURE_KB945701子项不存在,则必须手动创建它。如果您使用的是64位操作系统,则可能需要使用HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ MAIN \ FeatureControl \ FEATURE_IGNORE_ZONES_INITIALIZATION_FAILURE_KB945701
  • 右键单击FEATURE_IGNORE_ZONES_INITIALIZATION_FAILURE_KB945701, 指向“新建”,然后单击“DWORD值”
  • 键入w3wp.exe以命名新的注册表项,然后按Enter。
  • 右键单击“w3wp.exe”,然后单击“修改”。
  • 在“数值数据”框中,键入1,然后单击“确定”。

设置此注册表项后,将重新启动一个简单的应用程序池。除了改组应用程序池之外,您的.NET COM组件不再会随机停止工作而没有真正的解决方案!

答案 1 :(得分:1)

您是否在服务器上使用regasm.exe注册了您的dll?

http://msdn.microsoft.com/en-us/library/tzat5yw6%28VS.71%29.aspx

答案 2 :(得分:1)

我有这个问题。注册.NET COM模块时,必须使用regasm,如果要从IIS等应用程序调用它们,则必须使用/ codebase和此命令:

regasm yourfilename.dll /codebase

答案 3 :(得分:1)

我刚刚在一个运行良好多年的网站上出现此错误。似乎DLL已经以某种方式变得未注册。它是一个非托管DLL,因此我可以使用regsvr32重新注册它:

%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regsvr32 "C:\path\to\myAssembly.dll"

(另见difference between regasm and regsvr32

答案 4 :(得分:0)

在这个网站上:

http://connect.microsoft.com/VisualStudio/feedback/details/294241/kb937143-breaks-asp-to-net-com-interop

他们解决了在HKEY_USERS \ S-1-5-20 \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ Zones上对IUSR提供读取权限的问题。

答案 5 :(得分:0)

从命令提示符运行此命令(将myassembly.dll替换为程序集路径):

%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm.exe myassembly.dll /codebase

答案 6 :(得分:0)

我遇到了类似的问题,经过大量研究后我找到了解决方案,检查它是否适合你。 远程脚本编写会导致不同IE版本的大量错误。如果您将控件从一个页面传递到另一个页面并从那里创建一个新对象,您将无法创建对象错误。

示例:

page x.asp--

function1call() 
function2call() 

further in page x.asp--

function1call(){
   var rs_obj = RSGetASPObject("some-object");
   ----some other things---
   frmPost.action = "someplace.asp"; 
   frmPost.submit();
}  

function2call(){
   var rs_obj = RSGetASPObject("some-object1"); //you wont be able to create 
                                                //this object
   ----some other things---
}

似乎没有启动remoteScripting对象。由于function1call()调用frmPost.submit()。

如果你结合这两个功能,它将开始工作。即

page x.asp--

    function1call(){
       var rs_obj = RSGetASPObject("some-object");
       var rs_obj = RSGetASPObject("some-object1"); 
       ----some other things---
       frmPost.action = "someplace.asp"; 
       frmPost.submit();

    }

答案 7 :(得分:0)

您可能会收到错误“Server.CreateObject Failed”的另一个原因。 COM可见DLL在由COM加载时与常规.NET DLL的行为不同。您不能指望它加载与DLL位于同一目录中或通过Nuget包管理器下载的其他DLL。如果要加载其他DLL,则必须在全局程序集缓存(GAC)中注册它们。

请参阅:https://stackoverflow.com/a/23902131/2616170

如果程序集没有强名称,那么您将无法在GAC中注册它。