2012-05-29 2 views
6

Мы создали одну сборку .Net и сделали ее доступной как COM-объект. Когда мы пытаемся выявить любой метод этого объекта на странице ASP, мы получим сообщение об ошибке «80131509». Мы не получаем никаких ошибок при создании объекта Object. т. е. проходит через Server.CreateObject.Ошибка '80131509' в ASP Page

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

Я подозреваю, что может возникнуть проблема с IIS 7 при экспонировании этой DLL. Но не знаете, что это может быть? Мы также предоставили IUSR права.

Код:

set obj = Server.CreateObject("DataAccess") 
dim rs 
set rs=obj.GetLocations("All") <--- **Here i am getting an error.** 
+1

Является ли .dll зарегистрированным на сервере UAT, то есть с 'regsvr32'? – mellamokb

+0

Извините, я забыл упомянуть эту часть. Да DLL зарегистрирована на сервере UAT с помощью Regasm. – Bugreport

+0

Вы зарегистрировались.NET для 32-битного и 64-битного использования? Я не знаю, работает ли Classic ASP как 32-разрядный или 64-разрядный процесс (предположительно под w3wp.exe). Обратите внимание, что иногда вызов CreateObject может прерываться молча, вы получаете ошибку только при попытке использовать объект. Я предлагаю вам попробовать создать экземпляр разработанного Microsoft COM-видимого объекта .NET, чтобы узнать, работает ли система в принципе, прежде чем выяснять, что не так с вашей конкретной реализацией. – Dai

ответ

2

У нас есть несколько DLL СОМ в моей работе, и мы часто возникают проблемы, когда мы регистрируем DLL с Regasm и длл не работает. Он работает в других средах, но по какой-то причине он просто не будет работать в этом одном экземпляре. Com dll непостоянны. Иногда мы регистрируем его, отменяем, перезаписываем и перезагружаем. Иногда они таинственно начинают работать в другие времена.

Есть еще несколько вещей, которые могут пойти не так.

Убедитесь, что правильные разрешения установлены в папках, в которых живет dll, и в самой dll. Также убедитесь, что все зависимые dll присутствуют и также имеют правильное разрешение. Убедитесь, что все, что требуется для доступа к dll, также имеет правильные разрешения.

Если это не удается открыть regedit. Найдите указатель, связанный с объектом com. Иногда вы обнаружите, что пути, которые реестр имеет, перепутаны. Очистите любые ссылки на объект com, перезагрузите и перерегистрируйте его.

Я также видел исключение, возникшее в конструкторе, вызывающем проблемы. Когда объект com запускается, он взрывается. В одном из наших объектов добавлен метод отправки электронной почты при возникновении исключения.

В одном случае у нас был старый объект com, который больше не совместим с версией окон, в которых мы работали. Если вы обновили сервер, это может быть проблемой. В нашем случае мы написали наш собственный компонент, чтобы заменить сломанный старый.

Также убедитесь, что если объект ком сильно типизированных, что вы используете «Regasm/TLB/fickle_com_object.dll» кодовой базы

Короче есть несколько вещей, которые вызывают COM-объект, чтобы не работать:

  1. Несколько путей в реестре
  2. Неправильных разрешений безопасности папки
  3. сокрушительной когда создаются

Возможно, одна из этих вещей решит вашу проблему. Я знаю, как трудно это бывает иногда. Удачи!