Использовать сборку .NET с классической страницы ASP - PullRequest
3 голосов
/ 12 августа 2010

У меня есть старый веб-сайт .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. В разделе \ application \ Информация о сборке i. Проверьте «Сделать сборку видимой». B. Под сборкой i. Check «Регистрация для Com Interop »
  2. НЕ подписыватьit.
  3. Убедитесь, что IUSR имеет полные разрешения для файла.
  4. Перезапустите IIS через iisreset, чтобы очистить все кэши.

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

Эмир

Ответы [ 3 ]

2 голосов
/ 12 августа 2010

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

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

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

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

0 голосов
/ 01 сентября 2010

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

0 голосов
/ 12 августа 2010

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

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)
...