注册COM +对象不能在传统的ASP中找到(Registered COM+ object canno

2019-10-20 04:11发布

我使用C#创建一个dll在VS2008。 它是使用.NET Framework 2.0编译。 该项目是使用Visual C#/ Windows下的类库模板创建。 我不知道,如果该事项,但我试图使用经典的ASP和asp.net应用程序生成的DLL不是一个桌面应用程序。

这是通过利用现有传统ASP VBScript代码,在C#重写它创建。 我不是很有经验的创建的dll所以有很多还需要学习。 我一直在寻找在创造这个DLL的所有形式的帮助网页。

以下是我迄今所做的。

顶层类设置是这样的:

using System.Runtime.InteropServices;
using System.EnterpriseServices;
using System;
using System.Text;
using System.Web;

[assembly: ApplicationName("WebFramework")]
[assembly: ApplicationActivation(ActivationOption.Server)]
[assembly: ApplicationAccessControl(false,
           AccessChecksLevel = AccessChecksLevelOption.ApplicationComponent)]

namespace WebFramework
{
    [GuidAttribute("AACB678E-2C54-450A-873D-77A5A15BA0E5")]
    public class Framework : ServicedComponent
    {
        //Blah
    }
}

其他类项目是公开的,他们都从类框架继承。 我并没有包括这些类的GuidAttribute指令,因为我不知道这是否是必要。 我确实需要他们接触,因为我会从我的经典ASP / asp.net应用程序中引用它们。

我编译我的代码后,我复制了三个文件; Inter.Scripting.dll,WebFramework.dll和WebFramework.pdb到Web服务器。

Web服务器是Windows 2008 R2中包含安装IIS 7.5。

在服务器的命令提示符下,我跑了regsvcs程序,并安装了这个组件,并与出任何问题,注册的dll。 在命令窗口是这样的:

E:\inetpub\wwwroot\web\WebFramework>"C:\Windows\Microsoft.NET\Framework\v4.0.30319/regsvcs.exe" /appname:WebFramework /tlb:WebFramework.tlb WebFramework.dll

Microsoft (R) .NET Framework Services Installation Utility Version 4.0.30319.17929 Copyright (C) Microsoft Corporation.  All rights reserved.

Installed Assembly:
        Assembly: E:\inetpub\wwwroot\web\WebFramework\WebFramework.dll
        Application: WebFramework
        TypeLib: E:\inetpub\wwwroot\web\WebFramework\WebFramework.tlb

我检查了组件服务应用程序,并有下COM +应用WebFramework对象。 我也跑regedit并搜索“WebFramework”,它发现我的电脑\ HKEY_CLASSES_ROOT \ WebFramework下应用..

到目前为止,我觉得一切是正确的....或者是什么呢?

当我运行一个测试传统的ASP页面,下面的代码,我得到错误424 -必需对象

<html>
<head>
    <title></title>
</head>

<body>
    <script type="text/vbscript">
        On Error Resume Next

        Dim WebFrame
        Set WebFrame = Server.CreateObject("WebFramework.Framework")

        Document.Write("<hr>")
        Document.Write(Err.Number)
        Document.Write(" - ")
        Document.Write(Err.Description)
        Document.Write("<br><hr>")

    </script>
</body>
</html>

我在想什么? 为什么不能在ASP页面查找DLL?

[编辑]我忘了提一两件事。 在生成选项卡上的项目属性页中存在一个注册为COM Interop复选框。 我曾尝试编译具有这个选项选中和未选中它并没有区别。

Answer 1:

而不是集中你的COM组件是问题试着改变你的ASP代码的有效语法。

 <html> <head> <title></title> </head> <body> 
  <% 'This code will be processed server-side On Error Resume Next Dim WebFrame Set WebFrame = Server.CreateObject("WebFramework.Framework") 'Do we have an error? Display it. If Err.Number <> 0 Then Response.Write("<hr>") Response.Write(Err.Number) Response.Write(" - ") Response.Write(Err.Description) Response.Write("<br><hr>") End If %> 
 </body> </html> 

为什么Object Not Found的错误?

当你的代码如上所述是无效的,为什么呢?

  1. 使用<script type="text/vbscript">标签(通常runat="server"是需要使用<script>标签的服务器端,但是当你是表明它是由ASP处理的错误。在未来,虽然我建议您使用<%%>区分服务器端处理。

  2. 除非你初始化它在其他地方,也没有叫这么ASP对象Document 。 如果我猜我会说你试图向屏幕输出。 要做到这一点使用内置的Response对象(服务器端的请求是由的RequestResponse )。

我会说你Object Not Found是由ASP引起了不理解什么Document是因此提高了Object Not Found错误。


更新

阅读后,你的评论 ,我意识到,你的代码是被解释客户端等等Document.Write不会导致Object Not Found的错误,我认为现在的问题是Server.CreateObject ,因为这是与客户端服务器端语法VBScript不会了解。



Answer 2:

我在一个巨大的肢体走出去,在回答这个问题之前,我有一个决议。 我想我的问题有无关的dll,而是如何与IIS和这个新的Web服务器已经成立。

我在这里问了另一个问题: 获得IIS 7.5与传统的ASP工作是有关正确设置服务器和IIS。

到目前为止,没有运气,但如果我甚至不能得到一个简单的客户端的Hello World脚本的网页上显示的Hello World再怎么是我这辈子会认为,我可以有创建DLL对象。

如果我解决第一个问题,我仍然有使用DLL问题,那么我会回来并再次尝试。



文章来源: Registered COM+ object cannot be found in classic asp