2010-08-12 1 views
3

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

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

я уже следовали за этими шагами:

  1. Regasm/TBL/mycomdll.dll кодовой базы
  2. gacutil/я mycomdll.dll
  3. скопировать mycomdll.dll в каталог System32
  4. из консоли, выполните issreset
  5. Если дллы это создать в рамках 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 \ assembly information i. Установите флажок «Сделать сборку видимой». b. Под строительство i. Проверьте «Регистрация для Com Interop»
  2. НЕ подписывайте.
  3. Убедитесь, что IUSR имеет полные права доступа к файлу.
  4. Перезапустите IIS с помощью iisreset, чтобы очистить любые кеши.

И все еще не удалось запустить приложение. Есть еще идеи, что можно проверить или сделать? Благодаря!

Эмир

+0

У меня было приложение классического ASP, которое потребляло сборку .NET через COM-оболочку, а классический ASP-код был похож на ваш. Вы подтвердили, что strLogin и machineBuilding инициализированы? Вы выполнили objCommon.IsMachineAccount из другого клиента, чтобы убедиться, что сам вызов не вызывает ошибку? – Mayo

+0

Спасибо, Майо. Я попытался подключиться к dllhost и могу отлаживать коды asp, Да, strLogin имеет значение моей сети; машинное здание получит значение от вызова. Я не думаю, что есть проблемы с asp-кодами, так как у нас есть рабочая версия на рабочем сервере. Но, прежде чем я смогу выполнить запросы на изменение, мне нужно сделать исходный код правильным для моего локального пользователя. – Emirage

ответ

0

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

0

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

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

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

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

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

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

+0

Мне никогда не приходило в голову, что информация в HRESULT может быть разбита, чтобы изолировать ошибку (сопоставление конкретной ошибки с конкретной проблемой). +1 просто для того, чтобы показать мне что-то новое. Кроме того, если у вас есть ссылки, которые дают больше информации о интерпретации HRESULT, это было бы фантастически. – Mayo

+0

Найдено информации на http://blogs.msdn.com/b/heaths/archive/2005/07/21/441391.aspx. Объект (бит 8-15 равен 19) - это FACILITY_URT, который я позже нашел, означает Universal Runtime, раннее название для CLR. Очень интересный материал - мне нравится изучать новые вещи. :) – Mayo

+0

@Mayo: загляните в заголовочный файл SDK WinError.h за подробностями об этом. c: \ program files \ microsoft sdks \ windows \ v6.0a \ include для vs2008. –

 Смежные вопросы

  • Нет связанных вопросов^_^