2009-06-16 4 views
5

Ist es möglich, mit Hilfe von virtuellen Verzeichnissen und/oder virtuelle Anwendungen zwei Websites einzurichten, die denselben Anwendungscode (aspx Seiten etc.) teilen, aber unterschiedliches Web .config Dateien? Die Websites und der Code befinden sich auf demselben Server, der auf demselben IIS ausgeführt wird.Zwei Standorte ASP.NET-Sharing-Anwendung Dateien, aber mit verschiedenem web.config

Ich bin mit IIS 6.

+1

Was ist der Unterschied zwischen den beiden .config-Dateien? Vielleicht nur im Zusammenhang mit Authentifizierung und Autorisierung? Es ist normalerweise möglich, andere Möglichkeiten zu finden, um solche Probleme zu behandeln (wie die Freigabe zwischen der Internet-Site und der Intranet-Site, die sie verwaltet). –

+0

Der einzige Unterschied ist einige appSettings. Ich war nur neugierig zu wissen, ob ich das tun könnte, ohne irgendeinen Code zu ändern. –

+0

@ Jakob- Sie könnten es mit App-Einstellungen tun, indem Sie eine Art App-spezifischen Schlüssel voranstellen, aber das würde immer noch eine Codeänderung erfordern. – RichardOD

Antwort

5

Die kurze Antwort ist Nein, wenn Sie den Code an einem Ort behalten möchten. Die beste Lösung ist wahrscheinlich, dass die Anwendung eine benutzerdefinierte Konfigurationsdatei lädt, basierend auf dem, was Sie für die zu ermittelnde Site bestimmen (vermutlich Host-Header?).

Etwas wie ConfigurationManager.OpenExeConfiguration kann nützlich sein.

Ich denke, eine Alternative ist, mit einer Konfigurationskonvention zu kommen, wo Sie alles in der einen Datei haben und GetSection (mit einer Art von app spezifischen Präfix) verwenden, um die spezifischen Einstellungen für was Sie wollen.

+0

benötigt würde Ja, ich weiß, dass dies auf andere Weise getan werden kann. Ich hatte nur gehofft, ich könnte es tun, ohne den bestehenden Code zu ändern. –

+0

Die kurze Antwort lautet "Ja", aber nicht mit virtuellen Verzeichnissen, sondern mit NTFS-Festverbindungen: https://stackoverflow.com/questions/45889661/several-asp-net-sites-that-are-sharing-application-files -but-using-different-th –

0

sein sollte, die web.config in der virtuellen Anwendung verwendet. Wenn das Layout hierarchisch ist, müssen Sie möglicherweise nach der Vererbung von web.config suchen

+0

Ich sollte hinzufügen, würden Sie 2 physische Kopien des Anwendungscodes benötigen, da ein web.config in jedem – Pharabus

1

Dies ist einfach nicht möglich.

Warum ???

Beachte, dass der ASP.net-Worker-Prozess die Standardkonfigurationsdatei aus dem physischen Ordner liest, in dem sich die Anwendung physisch befindet. Virtuelle Verzeichnisse haben nichts mit web.config zu tun. Es wird nur vom Webserver (IIS) verwendet, um einem bestimmten physischen Verzeichnis als Root der Website zuzuordnen.

Danke.

+1

-1 für 'Virtuelle Verzeichnisse haben nichts mit web.config zu tun.' Siehe hier ... http://msdn.microsoft.com/en-us/library/ms178685(v=vs.100).aspx#configuration_inheritance, 'Wenn der Server eine Anforderung für eine bestimmte Webressource erhält, ASP.NET berechnet die Konfigurationseinstellungen für diese Ressource hierarchisch unter Verwendung aller Konfigurationsdateien im virtuellen Verzeichnispfad für die angeforderte URL. –

0

Ich nehme an, Sie haben Anwendung A, Anwendung B, Anwendung C und so weiter, die alle genau gleich sind, außer sie unterscheiden sich durch einige Konfigurationseigenschaften wie in ihren web.config-Dateien definiert.

Natürlich ist dies möglich - einfachste Möglichkeit ist, das Projekt als Webanwendung einzurichten, dann zu kompilieren und dann diese DLL unter den Anwendungen zu teilen. Sie können den GAC verwenden, wenn Sie möchten.

Sie können einzelne Sites in IIS einrichten, die auf ein freigegebenes Verzeichnis verweisen (oder in jedem ein virtuelles Verzeichnis verwenden), in dem die gesamte Logik liegt. Sie können jedoch den Ordner app_code nicht freigeben.

EDIT

RichardOD hat die beste Antwort oben, und ich habe etwas ähnliches vor implementiert. Im Grunde habe ich eine benutzerdefinierte Konfigurationsdatei eingerichtet, die von der web.config referenziert wird (um zu verhindern, dass die App neu gestartet wird, wenn ich Änderungen daran vornimmt). Diese Datei wird nach Hostnamen gelesen und enthält spezifische Eigenschaften pro Host.

Alles, was ich mache, ist das Hinzufügen von Host-Headern zu IIS und ein Eintrag für diesen Host in der benutzerdefinierten Konfigurationsdatei. Erledigt.

1

ich ziemlich sicher, dass ich habe das mal vor Jahren, um eine andere DB-Verbindungszeichenfolge für jede Instanz einer Website zu haben. Meine Vermutung war, dass es ein virtuelles Verzeichnis für jede Instanz der Website war die nur eine web.config mit Instanz-spezifische Einstellungen enthalten sind in und dann in jedem dieser virtuellen Verzeichnisse war eine App, die den Quellcode verwiesen (die eine gemeinsame inbegriffen web.config).

Also der Trick, wenn ich mich richtig erinnere, war, für eine bestimmte Website, ein virtuelles Verzeichnis, das nur eine web.config enthielt. Die Werte werden von der Sub-App dieses virtuellen Verzeichnisses übernommen.

+0

Bestätigen Sie, dass dieser Trick funktioniert – Pashec

+0

Cool. Ist Ihnen aufgefallen, welche web.config Vorrang hat? Das Innere oder das Äußere? Ich erinnere mich, dass es das Äußere war. –

Verwandte Themen