COM Interop дает сбой при переходе на новый сервер - PullRequest
1 голос
/ 15 августа 2011

Я столкнулся с проблемой, которую просто не могу решить.Предыстория: Несколько лет назад я разработал веб-сайт для одного из моих клиентов, используя ASP 2.0 и Ajax.Одной из функций веб-сайта является создание счетов клиентов по запросу.Их собственная производственная система написана на Visual Foxpro 8 с SQL Server 2005 на бэкэнде.Так как у меня уже был объект генерации счетов, который генерировал бы файл PDF, я свернул COM EXE и создал оболочку COM для использования на моей странице ASP.Он прекрасно работает годами, но теперь мы пытаемся переместить страницу в другое место, и все работает не так хорошо.

Сетевые специалисты воссоздали окружающую среду и остальную часть Интернета.Сайт работает отлично.Я даже могу создать экземпляр COM-объекта (я зарегистрировал init и все хорошо), но самый первый вызов одного из методов объектов приводит к «Исключению из HRESULT: 0x80010105 (RPC_E_SERVERFAULT))».Я просто застрял!

Вот что работает:

1) Используя визуальную программу foxpro с того же сервера, я могу создать экземпляр объекта, вызвать метод создания счета и создать PDF- никаких проблем.

2) Используя VBScript с очень простой ASP-страницы, я могу использовать Server.CreateObject (), чтобы создать экземпляр объекта и успешно сгенерировать оттуда счет.

Пока язнать:

1) объект зарегистрирован правильно и запускается как надлежащий пользователь со всеми правами, необходимыми для ведения бизнеса.

2) оболочка для COM EXE и COMверсии объектов совпадают.

Прошу прощения за длинный пост.Короче говоря: почему ASP.NET не сможет вызвать какой-либо метод COM-объекта VFP после того, как он успешно создан?

Заранее спасибо - я серьезно застрял в этомодин.

Эрик

Ответы [ 2 ]

1 голос
/ 18 августа 2011

Для тех, кто сталкивается с такой же ситуацией, добавление COM EXE в список исключений Data Execution Prevent (DEP) разрешало вызовы методов объектов.

0 голосов
/ 16 августа 2011

Скомпилировали ли вы его как EXE-файл, исполняемую DLL или многопоточную DLL.Кроме того, проблема, с которой я сталкивался ранее, это проблема одного или нескольких экземпляров записи dle OlePublic.Для подтверждения измените ваш проект ... затем в верхнем меню нажмите «Проект», затем «Информация о проекте».На третьей вкладке «Серверы» показаны доступные серверы в вашем проекте.На правой стороне это «Instancing», это будет один или несколько.Иногда, просто бросив это в одиночку, решил для меня случаи.Тем не менее, если многопоточность, убедитесь, что у вас есть многопоточный DLL-файл .. VFP9T.DLL

--- EDIT PER RESPONSE ... Так как вы скомпилировали его как EXE, его, вероятно, будет показыватькак распределенный COM-объект.Перейдите в «Пуск» Windows и запустите «DCOMCNFG», который вызовет диспетчер конфигурации DCOM.Вам придется прокручивать список элементов до тех пор, пока вы не найдете свой exe (имя класса OlePublic) и, возможно, придется пересмотреть разрешения, которые могут запускать / получать доступ / выполнять ... применять олицетворение и т. Д. *

ТОЛЬКО ДЛЯ ТЕСТИРОВАНИЯ --- Вы можете установить этот COM-сервер в качестве олицетворяющего администратора - ПРОСТО ТЕСТИРОВАТЬ и посмотреть, есть ли ошибки или нет.Если ошибок нет, вы узнаете о правах доступа и измените их на более ограниченного пользователя.

...