Назад | Перейти на главную страницу

Как я могу разделить строки подключения для сайта IIS, но сохранить общую папку приложения?

Прямо сейчас у нас есть примерно такая настройка для нашего бизнеса:

- App pool 1
 - Site 1
- App pool 2
 - Site 2
- App pool 3
 - Site 3

Соответствуют:

C:\inetpub\Site
C:\inetpub\Site2
C:\inetpub\Site3strings)
C:\inetpub\Site4

И так далее. Это раздражает, так как наш код должен храниться в нескольких папках, и люди часто забывают это делать; это проблема, которую можно исправить, но я бы предпочел решить ее в решении, а не в процессе. Код во всех папках идентичен, отличаются только файлы web.config.

Причина, по которой наши сайты разделены таким образом, несмотря на идентичный код .NET, заключается в том, что нам нужны разные строки подключения к разным серверам. Таким образом, какой бы сайт ни размещал привязку, получает трафик. Вот как мы справляемся с балансировкой нагрузки, что не самый красивый способ, но он выполняет свою работу.

Я бы предпочел НЕСКОЛЬКО сайтов (с одним или несколькими пулами приложений, не имеет значения), которые работают одинаково, но работают с ОДНОЙ общей папкой кода. Мне нужно решение для обработки строк подключения на основе сайта в IIS. Мне не повезло с поиском виртуальных каталогов, что казалось простым, но я не думаю, что это возможно, так как для этого нужен web.config, чтобы даже знать ГДЕ искать виртуальные каталоги.

Я уверен, что мне здесь не хватает чего-то простого, но мне нужна небольшая помощь, чтобы добраться до этого:

C:\inetpub\SiteMaster (contains all .NET code)
C:\inetpub\SiteMaster\Site1_Config (only needs to tell me the connection strings)
C:\inetpub\SiteMaster\Site2_Config (only needs to tell me the connection strings)
C:\inetpub\SiteMaster\Site3_Config (only needs to tell me the connection strings)

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

В зависимости от структуры вашего кода это может потребовать много работы.

Более простой способ - сохранить строки подключения в корневом файле web.config, а не в web.config вашего сайта.

У вас будет один сайт с одним файлом web.config, но без строки подключения.

Они в:

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \ web.config

или какую бы версию платформы ни использовал ваш пул приложений.

Вы можете использовать узел местоположения, чтобы указать разные строки подключения для разных сайтов:

<location path="Site">
    <connectionStrings>
        <add connectionString="data source=.;integrated security=true;database=Site" name="SiteCS" />
    </connectionStrings>
</location>
<location path="Site2">
    <connectionStrings>
        <add connectionString="data source=.;integrated security=true;database=Site2" name="SiteCS" />
    </connectionStrings>
</location>
<location path="Site3">
    <connectionStrings>
        <add connectionString="data source=.;integrated security=true;database=Site3" name="SiteCS" />
    </connectionStrings>
</location> 

Вы можете сделать то же самое для других настроек IIS и Dot.NET.

Обратной стороной может быть то, что вы должны быть администратором, чтобы изменить эти настройки, и что если вы измените их, все пулы приложений на сервере могут быть перезапущены.