Erreur lorsque vous configurez les gestionnaires managés 32 bits dans la console IIS

Symptômes

Envisagez le scénario suivant. Vous souhaitez ajouter un gestionnaire managé ou un module managé à la configuration de l’un de vos sites Web d’Internet Information Services (IIS) ou d’applications web sur un IIS web server. Pour ce faire, vous sélectionnez la cible site Web ou une application web dans la console Gestionnaire des services IIS, cliquez sur l’icône de mappages de Module ou de mappages de gestionnaires, puis cliquez sur les liens d’Ajouter un gestionnaire de code managé ou Ajouter un Module géré dans le volet de droite de la console.

Si le serveur exécute un système d’exploitation 64 bits et l’assembly .NET qui contient le gestionnaire managé ou mise en œuvre de module managé que vous essayez d’ajouter à la liste de modules ou le gestionnaires d’un assembly compilé pour les environnements 32 bits uniquement cible, vous recevez le message d’erreur suivant à partir de la console Gestionnaire des services Internet :

Erreur d’exécution de cette opération s’est produite
Détails : Cette méthode ne peut pas être appelée lors de la phase de début avant l’initialisation de l’application


Cause

Lorsque vous essayez d’ajouter un gestionnaire managé ou module géré, la console Gestionnaire des services IIS crée une liste de toutes les classes qui se trouvent dans les assemblys .NET qui sont fournis dans le dossier /bin de votre application et leurs dépendances. Dans cette liste sont également toutes les autres. Assemblys référencés NET. IIS effectue cette opération afin de déterminer lequel implémente IHttpHandler ou IHttpModule interfaces, selon si vous utilisez des gestionnaires ou modules, respectivement. Pour examiner toutes les classes à partir de tous les assemblys qui sont fournis dans le dossier /bin de votre application, la console Gestionnaire des services IIS crée un domaine d’application enfant .NET au sein du processus inetmgr.exe dans lequel ces classes sont chargées et inspectés pour la mise en oeuvre des interfaces précités.

Normalement, un assembly .NET compilé à intermédiaire langage MSIL (Microsoft) et est conçu pour être indépendant de la plate-forme (ce qui signifie qu’il peut s’exécuter sur des plates-formes 64 bits et de 32 bits). Vous pouvez compiler un assembly .NET pour cibler les plateformes 32 bits uniquement ou uniquement des plateformes 64 bits. Dans ce cas, le code MSIL davantage de compiler du code natif qui est spécifique à un jeu d’instructions processeur de cette plate-forme. Lorsque vous effectuez cette opération, l’assembly ne peut pas charger dans un processus qui ne correspond pas au nombre de bits de cible de la compilation : tentative de chargement d’un assembly qui cible une plateforme 64 bits à l’intérieur d’un processus 32 bits renvoie une erreur.

Étant donné que la console Gestionnaire des services IIS s’exécute dans un processus 64 bits sur une version de Windows 64 bits (par défaut), le domaine d’application .NET enfant est créé dans un processus 64 bits. Il n’y a aucun moyen de la console Gestionnaire des services IIS de savoir que certains des assemblys .NET qui sont trouvent dans le dossier /bin de votre application sont compilées pour cibler uniquement les plates-formes 32 bits lorsqu’il essaie de les charger pour effectuer les modifications de configuration. Si un assembly qui cible une plateforme 32 bits est rencontré, le chargement des assemblys dans le domaine d’application enfant .NET au sein du processus inetmgr.exe s’arrête et l’erreur décrite dans la section « Symptômes » s’affiche dans la console IIS.

Ce comportement est voulu par la conception, car la console Gestionnaire des services IIS ne peut pas déterminer le nombre de bits de cible pour les assemblys .NET pour votre application. Par conséquent, il suppose que tous les assemblys sont compilés à MSIL et sont indépendants de la plate-forme, qui ils peuvent s’exécuter sur les versions 32 bits et de 64 bits de Windows.

Solution de contournement

Pour contourner ce problème, correspond au nombre de bits du processus inetmgr.exe pour le nombre de bits de l’assembly cible qui doit être chargé dans le domaine d’application enfant .NET. Pour ce faire, sur une version 64 bits de Windows, exécutez la ligne de commande suivante à partir d’une invite de commandes avec élévation de privilèges :

mmc.exe /32 iis.msc

Charge Microsoft Management Console (MMC) en mode 32 bits et charge le composant logiciel enfichable console de la Gestionnaire des services IIS pour la console MMC. Étant donné que la console IIS est en cours d’exécution dans un processus 32 bits, le domaine d’application .NET enfant est créé dans un processus 32 bits, ce qui correspond à la largeur de bits de cible de l’assembly que vous essayez de configurer comme un gestionnaire managé ou un module managé.

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×