Проблемът с IIS6 Application Pools е, че за разлика от 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