J'écris du code pour permettre aux utilisateurs de gérer à distance IIS7. Sous le capot ce qui ajoute des règles d'autorisation à c:\windows\system32\inetsrv\config\administration.config
dans la section de configuration suivante:Pourquoi l'utilisation de Microsoft.Web.Management.dll de IIS7.5 fonctionne-t-elle uniquement dans un processus 64 bits?
system.webServer/management/authorization/authorizationRules
J'utilise l'ensemble Microsoft.Web.Administration
et espace de noms avec un code similaire à ce qui suit:
using Microsoft.Web.Management.Server;
...
ManagementAuthorization.Grant("MySiteUser, "My Web Site", false);
Ce code lève une exception si exécuté dans un processus 32 bits, s'il est construit en 64 bits, il fonctionne bien:
System.Runtime.InteropServices.COMException was unhandled Message=Filename: \\?\C:\Windows\system32\inetsrv\config\administration.config Error: The configuration section 'system.webServer/management/authorization' cannot be read because it is missing a section declaration`
Cependant, d'autres tâches de gestion du serveur effectuées à l'aide de l'ensemble Microsoft.Web.Administration
et le travail d'espace de noms très bien dans un processus 32 bits, par exemple:
using Microsoft.Web.Administration;
....
int iisNumber = 60000;
using (ServerManager serverManager = new ServerManager())
{
var site = serverManager.Sites.Where(s => s.Id == iisNumber).SingleOrDefault();
if (site != null)
{
site.Stop();
}
}
Ces deux ensembles apparaissent dans le GAC et sont pures MSIL (même si il y a une couche d'interopérabilité COM pour parler directement aux mécanismes de gestion sous-jacents d'IIS7).
Les fichiers de configuration sous-jacents applicationHost.config
et administration.config
ne sont visibles que 64 éditeurs de bits (par exemple Notepad.exe ou NotePad2.exe) et je soupçonne que c'est la raison pour laquelle mon code ne peut pas modifier administration.config
via le Microsoft.Web.Management
Pourquoi Est-ce que le Microsoft.Web.Administration
me permet de lire/modifier applicationHost.config
dans un processus 32 bits mais Microsoft.Web.Management
peut seulement lire/modifier administration.config
s'il est exécuté dans un processus 64 bits?
Je ne parviens pas à recompiler mon projet sur la cible x64 car il existe une dépendance à une bibliothèque COM 32 bits pour laquelle nous n'avons pas de source. Je peux construire un travail autour de ce qui impliquerait de faire des appels à une application WCF 64 bits hors processus (ou quelque chose de similaire) mais préfèrerait ne pas le faire.