web-dev-qa-db-fra.com

'Application' ASP.NET imbriquée dans IIS héritant des valeurs de configuration parent?

J'ai actuellement 2 x applications Web ASP.NET 3.5 dans IIS7 (appelons-les WebParent et WebChild).

WebChild est imbriqué dans la liste WebParent dans IIS7 et est configuré en tant qu'application (plutôt que juste un répertoire virtuel dans WebParent). Les deux utilisent actuellement leur propre pool d'applications (Classic).

WebParent et WebChild ont leurs propres fichiers web.config entièrement définis dans leurs propres répertoires racine.

J'avais supposé que voir que WebChild est défini comme une "application" dans IIS, qu'il n'hériterait rien du fichier de configuration WebParent. Cependant, malgré cette configuration, je vois des erreurs liées à divers éléments du web.config déjà en cours de définition (ce qui est correct, il y a quelques éléments qui se trouvent dans les deux fichiers de configuration, mais j'ai pensé qu'ils devraient être traités complètement indépendamment d'un seul). un autre)?

Quelqu'un peut-il expliquer pourquoi cela pourrait se produire?

30
marcusstarnes

S'ils se répètent, vous devrez <remove/> puis dans l'application enfant web.config d'abord, puis rajoutez l'élément que vous souhaitez qu'il soit à sa place. Cela suppose que vous souhaitez avoir une valeur différente. Si vous ne le faites pas, omettez simplement l'élément. Une chaîne de connexion serait un bon exemple de quelque chose qui est probablement commun à toutes les applications - il vous suffit donc de le spécifier à la racine.

Exemple:

    <siteMap defaultProvider="AdminSiteMapProvider" enabled="true">
      <providers>
        <remove name="AdminSiteMapProvider"/>
        <add name="AdminSiteMapProvider" description="Admin SiteMap provider" type="System.Web.XmlSiteMapProvider" siteMapFile="~/App_Data/admin.sitemap" securityTrimmingEnabled="true" />
      </providers>
    </siteMap>
16
ScottE

La solution exacte à votre problème dépendra du message d'exception de configuration que vous voyez. Cependant, c'est un problème typique qui peut souvent être résolu en utilisant l'attribut inheritInChildApplications sur l'élément location dans le web.config pour "WebParent". En encapsulant la section system.web entière dans un élément location comme suit, vous devriez pouvoir éliminer le problème que vous avez décrit:

<location path="." inheritInChildApplications="false">
  <system.web>
    <!-- ... -->
  </system.web>
</location>

Avec IIS 7, vous voudrez également envelopper la section system.WebServer de la même manière:

<location path="." inheritInChildApplications="false"> 
  <system.webServer>
    <!-- ... -->
  </system.webServer>
</location>

Cette solution est basée sur un excellent article de blog que j'ai trouvé ici .

62
Saul Dolgin

Je pense que le inheritInChildApplications = "false" est bon pour les cas où vous souhaitez toujours hériter une partie de la configuration du parent. Dans les cas où vous souhaitez arrêter complètement l'héritage (comme dans ce cas si j'ai raison), je suggère d'utiliser 2 pools d'applications distincts pour les 2 applications, puis d'appliquer un paramètre pas très bien documenté dans le fichier applicationHost.config comme je l'ai expliqué dans cette question "L'entrée a déjà été ajoutée" - Deux pools d'applications distincts

<add name="MyAppPool" autoStart="true" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" enableConfigurationOverride="false">
    <processModel identityType="NetworkService" />
</add>
3
Matteo Sganzetta