Использовать сборку.NET с классической страницы ASP
У меня есть старый веб-сайт.net 2005, на котором есть несколько страниц asp, и есть проблема со ссылкой на объект при доступе к.net dll. Задача обслуживания была передана мне, и первоначальный разработчик нигде не найден:(Я начал с.Net уже, так что я действительно не справляюсь с обработкой этой дьявольской проблемы.
На стрелке ниже я отмечаю, что "(0x80131500) ссылка на объект не установлена на экземпляр объекта".
Set objCommon = Server.CreateObject("Wrapper.CommonFunctions")
Dim machineBuilding
--->>> If objCommon.IsMachineAccount(strLogin, machineBuilding) Then
Я уже выполнил следующие действия:
- regasm / tbl / codebase mycomdll.dll
- gacutil / i mycomdll.dll
- скопируйте mycomdll.dll в каталог System32
- С консоли выполните issreset
- Если ваш 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.
а также эти:
- В свойствах проекта a. В разделе \ приложение \ информация о сборке i. Отметьте "Сделать сборку видимой". б. Под сборкой я. Отметьте "Зарегистрироваться для Com Interop"
- НЕ подписывайте это.
- Убедитесь, что у IUSR есть полные права доступа к файлу.
- Перезапустите 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)