Интеграция платежей LinkPoint с IIS7 приводит к сбою w3wp.exe

Мои сборки, которые обертывают стороннюю DLL, отлично работают в моем приложении для тестирования Windows, и они также прекрасно работают в веб-сервисе, когда появляются в режиме отладки (VS 2008 Visual Studio Development Server)! Однако приложение всегда вылетает при работе на локальном веб-сервере IIS7. Вот подробности сбоя из журнала событий при запуске на локальном сервере IIS:

Сбой приложения w3wp.exe, версия 7.0.6001.18000, отметка времени 0x47919413, сбойный модуль ntdll.dll, версия 6.0.6001.18000, отметка времени 0x4791a783, код исключения 0xc0000374, смещение ошибки 0x000aada3, идентификатор процесса 0x990, время запуска приложения 0x01c9b413081d5.

Обсуждение: я написал оболочку для DLL-библиотеки.NET от стороннего производителя (LinkPointTransaction.dll из FirstData) и написал несколько других сборок, которые ссылаются на эту оболочку. Поскольку код работает, вызов стороннему LinkPointTransaction.LinkPointTxn.Send() успешно отправляет транзакцию FirstData через Интернет, но мое приложение аварийно завершает работу w3wp.exe где-то во время этого вызова, прежде чем оно перейдет к следующей строке. Я не вижу управляемого исключения, которое я вижу; это просто падает Хорошо работает везде на моей машине, кроме IIS7.

Я использую 64-битную Vista Home Premium (IIS7), но я включил 32-битные приложения в IIS, создал отдельный AppPool только для этого веб-сервиса и перевел все свои сборки на x86. Я попытался запустить пул приложений под своей учетной записью с правами администратора, а не в качестве сетевой службы. UAC выключен. Я пробовал интегрированный и классический режимы. Я явно открыл порт TCP/IP в своем локальном брандмауэре, который LinkPointTransaction.dll использует для связи с FirstData. Я даже отключил брандмауэр (за роутером).

С любым из этих обходных путей, которые я перечислил, он всегда работает в приложении Windows, а также в веб-службе внутри VS Development Server, но никогда не работает на локальном сервере IIS.

AppPool для веб-сайта IIS находится в классическом режиме. (В ответ Гидону)

4 ответа

Решение

Я больше не думаю, что это вопрос программирования, поэтому я "отвечаю" на него.

Используя WinDbg, я отследил его до DLL, предоставленной поставщиком. Когда приложение аварийно завершает работу, это выглядит как проблема с тем, как dll освобождает память. Стек вызовов показывает операцию без памяти в dll, затем операцию "без кучи" в ядре, затем операцию "свободной кучи" в ntdll и последующую "ошибку кучи отчета" (а затем RtlReportCriticalFailure), которая разрушает Все это.

Я до сих пор не понимаю, почему это работает в приложении Windows Forms и в IIS 6, но не работает в IIS 7. Однако это стало скорее вопросом платформы, чем вопросом "программирования". Кроме того, ответственность за исправление ошибок лежит на поставщике, а не на моем.

ОБНОВЛЕНИЕ: В течение двух дней после подачи заявки в службу технической поддержки у поставщика они предоставили обновленный набор DLL-библиотек интеграции, использующих COM-объект, который вы зарегистрировали в regsvr32, и он работает в 64-битном IIS7, если вы регистрируете его в WOW64. каталог. YEA ДЛЯ ПЕРВОЙ ДАННОЙ ТЕХНИЧЕСКОЙ ПОДДЕРЖКИ!

Я спросил First Data о библиотеках DLL и возможности их запуска на 64-битной IIS7/.NET 4/Win 2008. Это был их ответ:

Спасибо за ваш недавний запрос относительно First Data Global Gateway. API Webservice - это наше текущее решение для 64-битных машин, работающих на IIS 7, поскольку ни один из файлов dll (Linkpointtransaction.dll, LPICOM_6_.dll) не будет обновлен для работы с 64-битным сервером. Webservice API потребует установить клиентский сертификат и отправить транзакцию через запрос SOAP. Дополнительную информацию об API Webservice можно найти по адресу http://www.firstdata.com/downloads/marketing-merchant/FDGG-Web-Service-API-v4.0.pdf.

Если вам нужны дополнительные разъяснения или вопросы, пожалуйста, свяжитесь с нашей службой поддержки по телефону ниже. Обратите внимание, что часы работы службы поддержки API с 9:00 до 18:00 по восточному поясному времени с понедельника по пятницу.

Это должно помочь другим, ищущим подобную информацию в будущем.

Как настроен сайт в IIS7? Если он работает в интегрированном режиме, переключитесь в классический режим. См. Срочные изменения для приложений ASP.NET 2.0, работающих в интегрированном режиме на IIS 7.0.

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

Действительно странная вещь заключается в том, что чаще всего это происходит при отладке MSTest, НО, если я щелкаю внутри метода test, а затем на главной кнопочной панели нажимаю "отладка тестов в текущем контексте", то это почти всегда дает сбой. Если я вместо этого запускаю тест, нажимая "отладка" в окне "Результаты теста", то он почти всегда проходит правильно.

Он также почти всегда работает правильно, если я не запускаю в режиме отладки, но иногда все равно не работает. Я даже собирался копировать / вставлять один и тот же код между двумя разными проектами в двух разных экземплярах VisualStudio 2010, и в одном из них код будет работать правильно, а в другом - не получится.

Другие вопросы по тегам