Проблема с пулами приложений IIS6 заключается в том, что в отличие от IIS7 они не знают, какая версия .NET Framework загружается в них.
веб-сайты IIS6 определяют, какая среда выполнения .NET Framework загружается в пул, по версии ASP.NET, на которую указывают карты сценариев сайта или подпрограммы. Рабочий процесс просто слепо загрузит необходимую ISAPI DLL, которая сопоставлена с расширением (или тем, что определено в сопоставлении с подстановочными знаками).
Этот старый метод часто является причиной большого горя, когда два разных сайта, выделенных в один и тот же пул, могут быть настроены для запуска разных версий ASP.NET, и вы получаете печально известное:
![введите описание изображения здесь](https://i.stack.imgur.com/IBIOS.jpg)
... и в журнал приложений Windows регистрируется следующее событие:
Event Type: Error
Event Source: ASP.NET 2.0.50727.0
Event Category: None
Event ID: 1062
Date: 12/01/2011
Time: 12:31:43
User: N/A
Computer: KK-DEBUG
Description:
It is not possible to run two different versions of ASP.NET in the same
IIS process. Please use the IIS Administration Tool to reconfigure your
server to run the application in a separate process.
Единственный способ определить, для какой версии .NET настроен пул приложений, - это пройтись по каждому сайту, которому назначен этот пул, и проверить необработанные карты сценариев.
Единственная проблема с этим заключается в том, что (например) по какой-либо причине у вас есть неправильно настроенный сайт (или вспомогательное приложение), которое больше не используется и настроено для использования другой версии ASP.NET, например:
Site .NET Version Application Pool
============================================================
WebSite1 ASP.NET 4.0 AppPool1
WebSite2 (no longer used) ASP.NET 2.0 AppPool1
В этом случае вы должны решить, какой сайт имеет приоритет для определения версии фреймворка.
Этот сценарий PowerShell может помочь вам определить, какая версия ASP.NET используется в каждом пуле:
# Walk sites
$allsites = ([adsi]"IIS://Localhost/W3SVC").children | where { $_.SchemaClassName -eq "IIsWebServer" }
$pools = @()
foreach($site in $allsites)
{
$path = "IIS://Localhost/W3SVC/" + $site.Name + "/root"
$siteRoot = [adsi]$path
$sitePool = $siteRoot.AppPoolId
$aspx = $siteRoot.ScriptMaps | where { $_.StartsWith(".aspx") }
if( $aspx.Contains("v1.1")) {
$runtime = "1.1"
} elseif ($aspx.Contains("v2.0")) {
$runtime = "2.0"
} elseif( $aspx.Contains("v4.0")) {
$runtime = "4.0"
} else {
$runtime = "Unknown"
}
$v = @{AppPool = $siteRoot.AppPoolId; RunTime = $runtime; SiteId = $site.Name}
$pools += $v
}
$pools | Sort-Object { $_.AppPool } | % { Write-Host $_.AppPool $_.SiteId $_.RunTime }
Он просматривает сайты только на корневом уровне и не выполняет рекурсивный обход каждого из них для определения дополнительных приложений.
person
Kev
schedule
23.06.2012