2009-06-16 13 views
5

Czy jest możliwe, aby przy użyciu katalogów wirtualnych i/lub aplikacji wirtualnych skonfigurować dwie witryny internetowe, które mają ten sam kod aplikacji (strony aspx itp.), Ale mają inną sieć Pliki .config? Witryny i kod znajdują się na tym samym serwerze działającym na tym samym IIS.Dwie witryny ASP.NET udostępniające pliki aplikacji, ale z innym web.config

Używam IIS 6.

+1

Jaka jest różnica między dwoma plikami .config? Być może związane z uwierzytelnianiem i autoryzacją? Zwykle można znaleźć inne sposoby radzenia sobie z takimi problemami (np. Udostępnianie strony internetowej i strony intranetowej, która nimi zarządza). –

+0

Jedyna różnica to niektóre ustawienia aplikacji. Byłem ciekawy, czy mogę to zrobić bez zmiany kodu. –

+0

@ Jakob- Można to zrobić z ustawieniami aplikacji, dodając przedrostek pewnego rodzaju klucza specyficznego dla aplikacji, ale wymagałoby to zmiany kodu. – RichardOD

Odpowiedz

5

Krótka odpowiedź brzmi nie, jeśli chcesz zachować kod w jednym miejscu. Prawdopodobnie najlepszym rozwiązaniem jest załadowanie przez aplikację niestandardowego pliku konfiguracyjnego w oparciu o to, co określasz, jaka strona ma być (prawdopodobnie nagłówek hosta?). Może być przydatne coś podobnego do ConfigurationManager.OpenExeConfiguration.

Sądzę, że alternatywą jest wymyślenie konwencji konfiguracyjnej, w której masz wszystko w jednym pliku i użyj GetSection (z pewnego rodzaju prefiksem specyficznym dla aplikacji), aby uzyskać określone ustawienia dla tego, co chcesz.

+0

Tak, wiem, że można to zrobić na inne sposoby. Miałem tylko nadzieję, że mogę to zrobić bez zmiany istniejącego kodu. –

+0

Krótka odpowiedź brzmi "tak", ale nie przy użyciu wirtualnych katalogów, ale twarde linki NTFS: https://stackoverflow.com/questions/45889661/several-asp-net-sites-that-are-sharing-application-files -ut-using-different-th –

0

powinien być użyty zostanie web.config w aplikacji wirtualnej. Jeśli układ jest hierarchiczny, być może trzeba będzie poszukać dziedziczenia web.config

+0

Powinienem dodać, potrzebujesz 2 fizycznych kopii kodu aplikacji, ponieważ web.config będzie potrzebny w każdym – Pharabus

1

To jest po prostu niemożliwe.

Dlaczego ???

Po przetworzeniu procesu roboczego asp.net zostanie odczytany domyślny plik konfiguracyjny z folderu fizycznego, w którym fizycznie rezyduje aplikacja. Wirtualne katalogi nie mają nic wspólnego z web.config. Jest używany przez serwer sieciowy (IIS) do mapowania do konkretnego katalogu fizycznego jako katalog główny witryny.

Dzięki.

+1

-1 dla 'Katalogi wirtualne nie mają nic wspólnego z web.config.' Zobacz tutaj ... http://msdn.microsoft.com/en-us/library/ms178685(v=vs.100).aspx#configuration_inheritance, 'Kiedy serwer otrzymuje żądanie określonego zasobu sieciowego, ASP.NET oblicza ustawienia konfiguracji dla tego zasobu w sposób hierarchiczny, używając wszystkich plików konfiguracyjnych znajdujących się w ścieżce katalogu wirtualnego dla żądanego adresu URL. " –

0

Zakładam, że masz aplikację A, aplikację B, aplikację C itd., Które są dokładnie takie same, z tym, że różnią się niektórymi właściwościami konfiguracji zdefiniowanymi w ich plikach web.config.

Oczywiście jest to możliwe - najłatwiejszym sposobem jest skonfigurowanie projektu jako aplikacji internetowej, a następnie skompilowanie, a następnie udostępnienie tej biblioteki DLL między aplikacjami. Możesz użyć GAC, jeśli chcesz.

Możesz skonfigurować pojedyncze witryny w IIS, które wskazują katalog współdzielony (lub użyj katalogu wirtualnego w każdym), w którym znajduje się cała logika, ale nie możesz udostępnić folderu app_code.

EDIT

RichardOD ma najlepszą odpowiedź powyżej, i wprowadziły coś podobnego wcześniej. Zasadniczo skonfigurowałem niestandardowy plik konfiguracyjny, który jest odniesieniem przez web.config (aby zapobiec ponownemu uruchamianiu aplikacji po wprowadzeniu w niej zmian). Ten plik jest odczytywany na podstawie nazwy hosta i zawiera określone właściwości dla każdego hosta.

Wszystko co mogę zrobić, to dodać nagłówki hosta do IIS i wpis dla tego hosta w niestandardowym pliku konfiguracyjnym. Gotowe.

1

Jestem pewien, że zrobiłem to kilka lat temu, aby mieć inny ciąg połączenia db dla każdego wystąpienia witryny. Domyślam się, że był katalog wirtualny dla każdej instancji witryny, która zawierała plik web.config z ustawieniami specyficznymi dla instancji, a następnie wewnątrz każdego z tych katalogów wirtualnych znajdowała się aplikacja, która odwoływała się do kodu źródłowego (w tym do udostępnionego pliku). web.config).

W ten sposób, jeśli dobrze pamiętam, była dla danej witryny katalog wirtualny, który zawierał tylko plik web.config. Wartości w tym będą dziedziczone przez pod-aplikację tego katalogu wirtualnego.

+0

Potwierdź, że ta sztuczka działa – Pashec

+0

Fajnie. Czy zauważyłeś, który plik web.config ma pierwszeństwo? Wewnętrzne czy zewnętrzne? Wydaje mi się, że pamiętam, że to było zewnętrzne. –

Powiązane problemy