【问题标题】:Server.CreateObject Failed in Classic ASPServer.CreateObject 在经典 ASP 中失败
【发布时间】:2012-01-06 07:58:15
【问题描述】:

我用我需要在经典 ASP 页面中使用的一个功能创建了 ASP.NET dll。

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

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

执行时出现以下错误

Server object error 'ASP 0177 : 80070002' 

Server.CreateObject Failed 

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

请帮助我摆脱这个问题

【问题讨论】:

    标签: asp.net asp-classic


    【解决方案1】:

    您必须先注册您的 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 组件将不再会在没有真正解决方案的情况下随机停止工作,除了改组应用程序池!

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,我使用推荐 regasm \tlb mydll.dll 注册了 dll
      【解决方案3】:

      我遇到了这个问题。当您注册 .NET COM 模块时,您必须使用 regasm,如果您想从 IIS 等应用程序中调用它们,您必须使用 /codebase 和以下命令:

      regasm yourfilename.dll /codebase
      

      【讨论】:

        【解决方案4】:

        我刚刚在一个运行良好多年的网站上出现了这个错误。似乎 DLL 不知何故未注册。它是一个非托管 DLL,所以我可以使用 regsvr32 重新注册它:

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

        (另见difference between regasm and regsvr32)

        【讨论】:

          【解决方案5】:

          在这个网站上:

          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 读取权限的问题。

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

              我遇到了类似的问题,经过大量研究,我找到了解决方案,检查它是否适合您。 远程脚本会导致不同 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();
              
                  }
              

              【讨论】:

                【解决方案8】:

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

                见:https://stackoverflow.com/a/23902131/2616170

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-12-28
                  • 2010-12-02
                  • 2022-07-01
                  • 2016-02-21
                  • 2023-03-14
                  • 2010-11-19
                  • 1970-01-01
                  相关资源
                  最近更新 更多