2010-09-17 13 views
3

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.

Répondre

2

Après quelques recherches, il ressemble à ceci est un bug:

Ce fil de discussion et un message par Carlos Aguilar explique tout:

http://forums.iis.net/p/1157779/1956471.aspx

Maintenant, je comprends la question, ce qui est happening est que Cassini est un processus 32 bits et que, en conjonction d'un bug dans notre configuration nous fait essayer pour charger le "redirigé" syswow (au lieu de system32) qui est le pourquoi nous ne pouvons pas trouver administration.config. En cours d'exécution dans le processus 64 bits atténue le problème parce qu'il n'y a pas de redirection "magique" et nous allons dans le bon dossier.

Tout processus de 32 bits va rencontrer ce roadhump.