Spencer Harbar sta scrivendo alcuni post estremamente interessanti sulla gestione degli Application Pool in SharePoint 2010. Lettura consigliatissima!
In un ultimo post, Spencer evidenzia un bug nell’associazione degli Application Pool alle application IIS (qui i dettagli).
Per riassumere, gli application pool creati in fase di configurazione di SharePoint hanno un comodo :-( Guid come nome (e, per giunta, neanche sempre *lo stesso*…).
SharePoint usa internamente una property (che IIS ignora) che mantiene un DisplayName per ciascun application pool utilizzato.
In un caso però (per l’application pool che ospita la Security Token Service Application) il display name viene utilizzato anche per l’impostazione dei binding in IIS, con ovvia impossibilità di risolvere il riferimento e conseguenti errori.
Sistemare il problema è semplice, basta correggere il riferimento all’application pool in questione (anche in questo caso, vi rimando al post di Spencer).
La correzione va ovviamente effettuata su ciascuna web application SharePoint. Può essere comodo, quindi, un breve script powershell per automatizzare il task.
Ecco un semplice esempio.
N.B.: Non utilizzo lo snap-in PowerShell per IIS, ma accedo alla configurazione di IIS tramite le sue API amministrative. Rimane valido il concetto, comunque, al di là dell’implementazione specifica (nel mio caso, semplicecemente non avevo lo snap-in a disposizione :-))
Hope useful!
1: # Find the STS application pool id (specific for the current environment).
2: $stsAppPoolDisplayName = "SecurityTokenServiceApplicationPool";
3: $stsAppPoolId = (Get-SPIisWebServiceApplicationPool |? {$_.Name -eq $stsAppPoolDisplayName}).Id
4: if ($stsAppPoolId -ne $null)
5: {
6: # Load the IIS management libraries.
7: $assm = [System.Reflection.Assembly]::LoadFrom("C:\windows\system32\inetsrv\Microsoft.Web.Administration.dll");
8: $sm = New-Object Microsoft.Web.Administration.ServerManager;
9:
10: # Fix the STS application pool references.
11: $sm.Sites |% {$_.Applications |? {$_.ApplicationPoolName -eq "$stsAppPoolDisplayName" } |% { $_.ApplicationPoolName = $stsAppPoolId.ToString("N") } }
12: $sm.CommitChanges();
13: }