Зарегистрированный объект COM + не может быть найден в классическом ASP

1

Я создал dll в VS2008, используя С#. Он был скомпилирован с использованием.Net Framework 2.0. Проект был создан с использованием шаблона библиотеки классов в Visual С#/Windows. Я не знаю, имеет ли это значение, но я пытаюсь использовать полученную dll в классических приложениях asp и asp.net, а не в настольном приложении.

Это было создано с помощью существующего классического кода asp vbscript и переписывания его на С#. Я не очень разбираюсь в создании библиотек 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
    }
}

Другие классы в проекте являются общедоступными, и все они наследуются от класса Framework. Я не включал директиву GuidAttribute для этих классов, потому что я не знаю, нужно это или нет. Мне они нужны, потому что я буду ссылаться на них из своих классических приложений asp/asp.net.

После того как я скомпилировал свой код, я скопировал три файла; Inter.Scripting.dll, WebFramework.dll и WebFramework.pdb на веб-сервер.

Веб-сервер представляет собой окно 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

Я проверил приложение "Службы компонентов", и в [Приложениях CN10] появился объект WebFramework. Я также запустил regedit и искал "WebFramework", и нашел свое приложение в Computer\HKEY_CLASSES_ROOT\WebFramework..

Пока я думаю, что все правильно... или не так ли?

Когда я запускаю тестовую классическую страницу asp со следующим кодом, я получаю Error 424 - Object required.

<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?

[Edit] Еще одна вещь, о которой я забыл упомянуть. На странице "Свойства проекта" на вкладке "Сборка" установлен флажок "Регистрация для COM-взаимодействия". Я попытался скомпилировать эту опцию, отмеченную и не отмеченную, и это не имело никакого значения.

Теги:
dll
asp-classic
vbscript

2 ответа

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 (запрос на стороне сервера состоит из Request и Response).

Я бы сказал, что ваш Object Not Found потому что ASP не понимает, что такое Document, и, следовательно, вызывает ошибку Object Not Found.


Обновить

После прочтения вашего комментария я понял, что ваш код интерпретируется на стороне клиента, и поэтому Document.Write не вызовет ошибку Object Not Found Думаю, теперь проблема в Server.CreateObject потому что это синтаксис на стороне сервера с клиентской стороны. VBScript не будет Понимаю.

  • 0
    Я думаю, у меня может быть больше рыбы, чтобы жарить. Я думаю, что-то запутано в IIS. Я даже не могу заставить это работать: '<html> <head> <title> </ title> </ head> <body> <% Response.Write ("Hello World <br>")%> </ body> < / html>». Он отображает пустую страницу.
  • 0
    @RobertLawson Если он вообще не обрабатывает ASP, то вам нужно убедиться, что у вас есть настройка HTTPHandler для Classic ASP в IIS. Вы также можете найти это руководство полезным.
Показать ещё 8 комментариев
0

Я выхожу на огромную конечность и отвечаю на этот вопрос, прежде чем у меня будет разрешение. Я думаю, что моя проблема не имеет ничего общего с dll, а скорее с тем, как IIS и этот новый веб-сервер настроены.

Я задал еще один вопрос: IIS 7.5 работает с классическим ASP, что касается правильной настройки сервера и IIS.

Пока им не повезло, но если я даже не могу получить простой клиентский сценарий Hello World для отображения Hello World на веб-странице, то как я мог подумать, что я мог бы создать там объект dll.

Если я решаю первую проблему, и у меня все еще есть проблемы с использованием dll, я вернусь к ней и повторю попытку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню