Запуск моего веб-сайта в пуле 32-разрядных приложений в 64-разрядной ОС - PullRequest
4 голосов
/ 12 апреля 2010

Вот мои настройки:

Dev: - 64-разрядная версия Windows Server 2008 - Visual Studio 2008 - решение с 3 библиотеками классов, 1 веб-приложением

промежуточный веб-сервер: - Windows Server2008 R2 64-bit - интегрированный пул приложений IIS7.5 с включенными 32-битными приложениями

В Visual Studio я настроил все 4 моих проекта для компиляции в «Любой процессор», но когда я запускаю это веб-приложение навеб-сервер с 32-разрядным пулом приложений отключается и завершает работу.Когда я запускаю пул приложений в 64-битном режиме, он работает нормально.Производственный веб-сервер требует, чтобы я запускал 32-разрядный пул приложений в 64-разрядной ОС, поэтому я настроил его таким образом на промежуточном веб-сервере.

(я рассматривал возможность публикации на ServerFault, но на серверной частикажется, работает нормально. Это мой код, в частности, который не хочет работать в 32-битном пуле приложений, поэтому я публикую здесь.)

Редактировать: Ошибка просмотра события

Faulting application name: w3wp.exe, version: 7.5.7600.16385, time stamp: 0x4a5bcd2b
Faulting module name: KERNELBASE.dll, version: 6.1.7600.16385, time stamp: 0x4a5bdbdf
Exception code: 0xe053534f
Fault offset: 0x0000b727
Faulting process id: 0x%9
Faulting application start time: 0x%10
Faulting application path: %11
Faulting module path: %12
Report Id: %13

Ответы [ 8 ]

4 голосов
/ 17 мая 2010

К сожалению, я не думаю, что кто-то здесь мог бы понять это. Две библиотеки DLL, которые я использовал, были взяты из загруженного ZIP-файла, и когда я зашел в свойства этих файлов, появился ящик, в котором говорилось, что они были загружены из Интернета, и мне пришлось их «разблокировать». Кажется, что 64-битный пул приложений не соблюдает это, но когда я опустился до 32-битного, он это сделал. Как только я «разблокировал» библиотеки DLL, все стало работать нормально.

2 голосов
/ 12 апреля 2010

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

1 голос
/ 12 июля 2011

В моем случае проблема была вызвана неправильной версией dll стороннего производителя в папке bin клиента.

На моем компьютере установлены версии 10.3 и 11.1 Infragistics. У моего проекта есть ссылка с версией 11.1, но в папке bin моего клиента присутствуют только Infragistics 10.3.

Поскольку на моем компьютере установлены обе версии, у меня нет ошибок при сборке приложения. Причина в том, что мой может определить, где находится хорошая версия Infragistics; в GAC. Но для клиента, у которого не установлена ​​Infragistics, я получаю ту же ошибку, что и в вопросе этого поста.

1 голос
/ 12 апреля 2010

Ваш пост немного запутан.

Любой процессор - X64 работает?

Любой процессор - X64 + 32bitCompat не работает?

Если это так, похоже, что это несоответствие между используемыми библиотеками. Возможно, среда выполнения интерпретируется как x64, но питается библиотеками x86. Важно, чтобы они совпадали.

Вы должны создать новые конфигурации для x64 и x86 (или просто x86) и развернуть их при необходимости По моему опыту, использование «Любого процессора» ведет по этому плохому и безобразному пути.

1 голос
/ 12 апреля 2010

Я полагаю, что ошибка свидетельствует о попытке загрузить 64-битную DLL в 32-битный процесс. Все ваши проекты могут быть настроены на «Любой процессор» (или на x86), но я готов поспорить, что вы ссылаетесь на 64-битную DLL. Используете ли вы какие-либо сторонние библиотеки, для которых вы включили 64-битную DLL?

Можно менять местами 32-битные / 64-битные ссылки в зависимости от среды текущей машины, изменяя файлы .csproj и используя небольшой скрипт msbuild. Если вам интересно, как это можно сделать, дайте мне знать, и я опубликую продолжение.

1 голос
/ 12 апреля 2010

Для каждого проекта попробуйте следующее:

1) Щелкните правой кнопкой мыши проект и выберите Свойства.

2) Выберите вкладку Build на левой стороне

3) Выберите x86 для цели платформы

4) Перестроить

1 голос
/ 12 апреля 2010

Полагаю, что 64-битный может выполнять как 64-битный, так и 32-битный код, но 32-битный может запускать только 32-битный код.

Если вы хотите запустить код, скомпилированный 64-битным компилятором, в 32-битном включенном блоке, вам необходимо скомпилировать код с помощью 32-битного компилятора.

0 голосов
/ 14 марта 2012

Тот же (общий) код исключения, но для меня проблема возникла, если я попытался пройти аутентификацию с использованием учетной записи администратора домена (в моем 32-разрядном приложении .net 2 на IIS 7 на 2k8R2). Если я создал локального пользователя и добавил его в группу Builtin \ Administrators, а затем вошел в систему с этой учетной записью, приложение работало нормально. Несмотря на то, что пользователь с правами администратора домена автоматически входит в число встроенных \ администраторов. Надеюсь, что такой образ мышления, а не опора на учетные записи администратора домена, поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...