Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Благодарим вас за ваш недавний запрос относительно First Data Global Gateway.Webservice API - это наше текущее решение для 64-разрядных компьютеров, работающих на IIS 7, поскольку ни один из DLL-файлов (Linkpointtransaction.dll, LPICOM_6_.dll) не будет обновлен для работы с 64-разрядным сервером.Webservice API потребует установки сертификата клиента и отправки транзакции через SOAP-запрос.Дополнительную информацию о Webservice API можно найти по адресу 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, НО, если я нажимаю внутри метода тестирования, затем на главной панели кнопок нажимаю "отлаживать тесты в текущем контексте", то это почти всегда завершается неудачей.Если я вместо этого запускаю тест, нажав "debug" в окне "Результаты теста", то он почти всегда проходит корректно.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top