Два сайта ASP.NET, совместно использующие файлы приложений, но с разными web.config - PullRequest
5 голосов
/ 16 июня 2009

Можно ли использовать виртуальные каталоги и / или виртуальные приложения для настройки двух веб-сайтов, которые используют один и тот же код приложения (страницы aspx и т. Д.), Но имеют разные файлы web.config? Сайты и код находятся на одном сервере, работающем на том же IIS.

Я использую IIS 6.

Ответы [ 5 ]

5 голосов
/ 16 июня 2009

Короткий ответ - нет, если вы хотите сохранить код в одном месте. Вероятно, лучшее решение - это приложение, загружающее пользовательский файл конфигурации в зависимости от того, какой сайт вы определяете (предположительно, заголовок узла?).

Что-то вроде ConfigurationManager.OpenExeConfiguration может быть полезно.

Я полагаю, что альтернативой является придумать соглашение о конфигурации, в котором у вас есть все в одном файле и использовать GetSection (с каким-то префиксом для конкретного приложения), чтобы получить конкретные настройки для того, что вы хотите .

1 голос
/ 18 октября 2012

Я почти уверен, что сделал это несколько лет назад, чтобы иметь разные строки подключения к базе данных для каждого экземпляра веб-сайта. Я предположил, что для каждого экземпляра веб-сайта был виртуальный каталог, в котором only содержал web.config с конкретными настройками экземпляра, а затем внутри каждого из этих виртуальных каталогов было приложение, которое ссылалось на исходный код ( который включал общий web.config).

Таким образом, уловка, если я правильно помню, заключалась в том, чтобы для данного веб-сайта иметь виртуальный каталог, содержащий только файл web.config. Значения в этом будут унаследованы вложенным приложением этого виртуального каталога.

1 голос
/ 16 июня 2009

Это просто невозможно.

Почему ???

Поскольку рабочий процесс asp.net будет считывать файл конфигурации по умолчанию из физической папки, в которой физически находится приложение. Виртуальные каталоги не имеют ничего общего с web.config. Он просто используется веб-сервером (IIS) для сопоставления с определенным физическим каталогом в качестве корня сайта.

Спасибо.

0 голосов
/ 16 июня 2009

Я предполагаю, что у вас есть приложение A, приложение B, приложение C и т. Д., Которые абсолютно одинаковы, за исключением того, что они отличаются некоторыми свойствами конфигурации, определенными в их файлах web.config.

Конечно, это возможно - проще всего настроить проект как веб-приложение, затем скомпилировать, а затем поделиться этим dll среди приложений. Вы можете использовать GAC, если хотите.

Вы можете настроить отдельные сайты в IIS, которые указывают на общий каталог (или использовать виртуальный каталог в каждом), где находится вся логика, но вы не можете открыть общий доступ к папке app_code.

EDIT

RichardOD имеет лучший ответ выше, и я реализовал нечто подобное раньше. По сути, я настроил пользовательский файл конфигурации, на который ссылается web.config (чтобы предотвратить перезапуск приложения при внесении в него изменений). Этот файл читается по имени хоста и содержит определенные свойства для каждого хоста.

Все, что я делаю, это добавляю заголовки хостов в IIS и запись для этого хоста в файле пользовательской конфигурации. Готово.

0 голосов
/ 16 июня 2009

должно быть, web.config в виртуальном приложении будет использоваться. Если макет иерархический, вам может потребоваться наследование web.config

...