2013-03-22 8 views
5

Ich habe eine Website mit einem virtuellen Verzeichnis, das auch eine Website enthält. Wenn ich versuche, eine Seite aus dem virtuellen Verzeichnis zu starten, erhalte ich eine IIS 7.5 Fehler, dass der Name (aus der Verbindungszeichenfolge) bereits in der Auflistung ist. Dies war kein Problem, bevor ich einen Domänenbenutzer als Identität im App-Pool hinzufügte. Weiß jemand, warum das passiert? Ich hatte den Eindruck, dass die web.config der Sub-Level-Anwendung die Eltern standardmäßig überschreibt. Und noch einmal, das hat einmal funktioniert, bis ich eine benutzerdefinierte Identität hinzugefügt habe.Web.config im virtuellen Verzeichnis überschreibt Web.config der übergeordneten Website nicht.

Der Fehler auf der Seite ist "Parser Fehlermeldung: Der Eintrag 'DB-Name wurde bereits hinzugefügt."

Der DB-Name befindet sich in beiden Verbindungszeichenfolgen (d. H. Übergeordnetes und virtuelles Verzeichnis). Ich kann eine der Verbindungszeichenfolgen nicht löschen, da das virtuelle Verzeichnis nur für Testzwecke erstellt wird, aber in der Produktion als eigene Website ausgeführt wird.

Antwort

7

Eine Unterdatei web.config überschreibt unabhängig von der Anwendung kein übergeordnetes Element. Alle web.configs werden bis zum Stamm der Hauptanwendung gestapelt. Damit der Unteranwendungsordner einen Verbindungszeichenfolgenschlüssel verwendet, der bereits verwendet wird, muss er zuerst entfernt werden oder alle Verbindungszeichenfolgen müssen gelöscht werden. Wenn Sie ein wirklich alone-Anwendung stehen sein wollen als ein Kind diese Strings zu Ihrer Verbindung hinzufügen:

<connectionStrings> 
    <clear /> 
    <your connection string> 
<connectionStrings> 

Wenn Sie nur die einzelne Verbindungszeichenfolge verwenden, um dies zu entferne:

<remove key="yourConnectionStringName" /> 
+1

Irgendeine Idee, warum das vorher nicht geschehen ist? Ich habe beide Anwendungen seit Jahren eingerichtet und bin nie in einen Konflikt geraten. Auch kann ich die Verbindungszeichenfolge in der Unter-App nicht ausschließen, da dies in der Regel auf der Stammebene des Servers verwendet wird. – u84six

+0

@ u84six: Es wird es nicht für die Stammebene entfernen, es wird es nur aus der Anwendung auf dieser Ebene (und allen untergeordneten Elementen dieser Anwendung) entfernen. Nein, ich kann ehrlich nicht sagen, warum es so plötzlich ist. Die von Ihnen beschriebene Änderung spielt in diesem Konflikt keine Rolle. –

+0

@MystereMan: Das ist nicht korrekt. Ein virtuelles Verzeichnis wird als normales Unterverzeichnis angesehen, und die web.config-Dateien werden weiterhin gestapelt und vererbt. http://msdn.microsoft.com/en-us/library/ms178685(v=vs.100).aspx –

0

@ u84six ,

Heute war mir das passiert. Ich hatte einige Websites und Webservices in der gleichen Root-Website. Die Wurzel ist die Standard-IIS-Website (Standardwebsite) und ich denke, sie zeigte auf C: \ Inetpub \ wwwroot. Es ist eine Entwicklungsumgebung.

Nachdem ich this answer gelesen habe, fand ich heraus, dass einer meiner Webservices die Root-Website war (immer noch nicht sicher, was es verändert hat ... vielleicht Visual Studio nach einer Migration von 2010 bis 2012). Dieser Webservice verwendete den connectionString im Konflikt. Ich ändere den Pfad zurück zu C: \ Inetpub \ wwwroot \ und alles wurde normal.

Vielleicht ist Ihnen etwas Ähnliches passiert.

Verwandte Themen