Использовать сборку.NET с классической страницы ASP

У меня есть старый веб-сайт.net 2005, на котором есть несколько страниц asp, и есть проблема со ссылкой на объект при доступе к.net dll. Задача обслуживания была передана мне, и первоначальный разработчик нигде не найден:(Я начал с.Net уже, так что я действительно не справляюсь с обработкой этой дьявольской проблемы.

На стрелке ниже я отмечаю, что "(0x80131500) ссылка на объект не установлена ​​на экземпляр объекта".

Set objCommon = Server.CreateObject("Wrapper.CommonFunctions")
  Dim machineBuilding
--->>>  If objCommon.IsMachineAccount(strLogin, machineBuilding) Then

Я уже выполнил следующие действия:

  1. regasm / tbl / codebase mycomdll.dll
  2. gacutil / i mycomdll.dll
  3. скопируйте mycomdll.dll в каталог System32
  4. С консоли выполните issreset
  5. Если ваш dll создан в framework 2.0, создайте файл "dllhost.exe.config" в каталоге system32 и поместите его:

<?xml version="1.0"?> <configuration> <startup> <supportedRuntime version="v2.0.50727"/> <requiredRuntime version="v2.0.50727"/> </startup> </configuration>

6.- Перезапустите IIS с помощью команды issreset.

а также эти:

  1. В свойствах проекта a. В разделе \ приложение \ информация о сборке i. Отметьте "Сделать сборку видимой". б. Под сборкой я. Отметьте "Зарегистрироваться для Com Interop"
  2. НЕ подписывайте это.
  3. Убедитесь, что у IUSR есть полные права доступа к файлу.
  4. Перезапустите IIS через iisreset, чтобы очистить любые кэши.

И до сих пор не удалось запустить приложение. Есть еще идеи, что проверить или сделать? Спасибо!

эмир

3 ответа

Решение

Проблема заключалась в том, что приложение ищет файл, содержащий имя хоста базы данных.

Значение HRESULT очень актуально. Обратите внимание на "код объекта" в 0x80131500, 13 указывает, что источником ошибки является управляемый код. Вы уже получили дружественный перевод на 1500.

Другими словами, управляемый код выдал исключение, и он не был обработан. Конечно, это не редкость, управляемый код очень часто вызывает исключения. Особенно NullReferenceException, тот, который вы вызвали. Отладка это не так просто, так как вы запускаете управляемый код в неуправляемом процессе. Не совсем уверен, что правильная процедура для IIS, обычно это делается с помощью Tools + Attach to Process. Лучший способ справиться с этим - изолировать код, написать несколько модульных тестов.

Помимо этого, переменная MachineBuilding кажется мне хорошим кандидатом на NRE. Вы не инициализировали это.

Кстати: это не имеет ничего общего с регистрацией. Это приводит к совершенно другому виду ошибок.

У меня было решение, похожее на ваше, но оно давно прошло. У меня все еще есть некоторая информация об этом, однако, и я заметил, что мое заявление о регазме отличается.

regasm mycomdll.dll /tlb :mycomdll.tlb

Ваши ссылки tbl вместо tlb - может быть, в этом проблема?

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

Я также хочу подтвердить, что мой классический ASP-код соответствует вашему...

set obj = server.CreateObject("mycomdll.myclass")
...
call obj.method(false)
...
myvar = obj.method2(param1, param2, param3)
Другие вопросы по тегам