В рамках недавнего проекта передо мной была поставлена задача: перенести веб-сайт с основой DNN 3.2.2 на Windows Server 2003 x64 Edition. То, с чем мне пришлось столкнуться, скорее относится не непосредственно к DNN, а к платформе .NET 1.1 Framework, от которой зависят ASP.NET и DNN.
Прежде всего, я обратил внимание, что .NET 1.1 не устанавливался в 64-битной системе. Поэтому я скачал свободно распространяемый пакет от Microsoft, в котором 64-битная версия Windows Server 2003 SP1 отмечалась в числе поддерживаемых операционных систем. Однако сразу же после начала инсталляции я столкнулся со следующим сообщением:
Такая несовместимость возникает из-за того, что 64-битные процессоры не в состоянии загружать 32-битные динамически подключаемые библиотеки DLL. Слой совместимости Windows-32-on Windows-64 (WOW64), позволяющий Internet Information Server 6.0(IIS 6.0) запускать 32-битные веб-приложения в 64-битной ОС, был включен в состав Service Pack 1 Windows Server 2003. Другими словами, вам необходимо понизить ISS до 32-битного режима, чтобы запустить предыдущие версии DNN4 в 64-битной ОС.
Полагаясь на инструкции, я открыл командную строку, запустил директорию %SystemDrive%\Inetpub\AdminScripts и ввел команду для переключения IIS в режим WOW64.
cscript.exe adsutil.vbs set W3SVC/AppPools/Enable32BitAppOnWin64 “true”
Затем я подтвердил, что ASP.NET обладает должной совместимостью с IIS, и нажал на кнопку Allow («Разрешить») в списке Web Service Extension.
Однако одного кусочка головоломки до сих пор не хватало. На панели управления IIS не было вкладки ASP.NET . На этом этапе я запустил установку DNN, чтобы посмотреть, что произойдет. Программа выдала ошибку, причем сообщение об ошибке гласило, что DNN обращается к ASP.NET. 2.0. DNN 3.2.2 должна запускаться с версией 1.1, но как же переключить версию без вкладки ASP.NET в IIS?
Не особо беспокоясь о запуске на этой платформе 4-х версий DNN и прочих веб-приложений, требующих ASP.NET 2.0, я «отключил» версию 2.0, перейдя по директории %SystemDrive%\WINDOWS\Microsoft.NET\Framework\v2.0.50727 directory и запустив aspnet_regiis –u из командной строки. Таким образом, у нас остается только ASP.NET 1.1, и DNN, просто не из чего выбирать. Так и есть, сайт запустился без каких либо ошибок и отлично работал.
Однако меня все равно волновало отсутствие вкладки ASP.NET в IIS. Оказалось, что это довольно таки сложная проблема. Однако, вы все равно можете одновременно запускать ASP.NET 1.1 и 2.0 в 32-битном режиме на 64-битном компьютере. Вам придется воспользоваться aspnet_regiis -s ,чтобы указать путь для веб-приложений к определенной версии ASP.NET.
Подводя итоги, следует сказать, что вы можете запускать ASP.NET 1.1 и 2.0 (даже одновременно) в 64-битной ОС Windows, однако вам придется переключать IIS в режим WOW64 для поддержки 32-битных DLL библиотек на платформе NET 1.1 Framework. Как и ожидалось, слой совместимости Windows-32-on Windows-64 накладывает дополнительные ограничения, почему компания Microsoft и «не рекомендует использовать данную среду для приложений NET 1.1 Framework, требующих высокой производительности или расширения, как например приложения ASP.NET со сложным механизмом загрузки». Конечно же, все это имеет смысл только в том случае, если вам приходится поддерживать «устаревшие» веб-приложения, типа DNN 3.2.2. Как только вы перейдете на DNN 4 поколения, вы перейдете и на платформу .Net Framework 2.0 с родной 64-битной поддержкой систем на основе процессоров Itanium.
Мне потребовалось довольно много времени, чтобы разобраться во всем этом. Поэтому, если вы обнаружите где-то неверные указания, то, пожалуйста, оставьте свой комментарий.