Вопрос

У меня есть один экземпляр веб-приложения, подключенный к нескольким базам данных.На основе имени домена (например, www.shop1.com, www.shop2.com, ..) я переключаю строку подключения в Entity Framework.

shop1.com -> Database1

shop2.com -> Database2

shop3.com -> Database3

Все идет нормально.

Я также использую состояние сеанса Sql Server и хочу переключить базу данных состояния сеанса так же, как я переключаю базу данных для своих данных.

shop1.com -> SessionStateDatabase1

shop2.com -> SessionStateDatabase2

shop3.com -> SessionStateDatabase3

Заранее спасибо за вашу помощь.


Дополнительная информация, если вы хотите знать, почему я это делаю:

На самом деле я реализую мультитенантность.В описании выше показаны три сайта.На самом деле у меня их больше 50.И количество сайтов будет расти в ближайшие несколько месяцев.На данный момент все сайты развертываются отдельно, что означает, что всякий раз, когда мне нужно выпустить патч или обновление, я развертываю все 50 сайтов.Обслуживание сайтов таким образом становится кошмаром.Поэтому я подумал о том, чтобы разместить от 5 до 10 сайтов на одном экземпляре, в зависимости от их использования, чтобы мне приходилось обслуживать меньше экземпляров.

Это было полезно?

Решение

В подобных случаях я всегда смотрю исходный код фреймворка.Сначала я выясняю, где в конфигурации хранится строка подключения состояния сеанса, а затем нахожу, где она используется.Частный класс System.Web.SessionState.SqlSessionState.SqlSessionStateStore есть метод OneTimeInit(), где он считывает строку подключения.Здесь я заметил, что есть поддержка партинионга, см. здесь: http://msdn.microsoft.com/en-us/library/aa478952.aspx .Я никогда раньше не слышал об этом, но похоже, что он делает именно то, что вы хотите: вы можете хранить состояние сеанса в нескольких базах данных на основе любых критериев, которые вы хотите.+1 за вопрос, кстати, это классная функция.Кроме того, если это не сработает, вы можете попробовать реализовать свою собственную реализацию SessionStateStoreProviderBase, которую можно публично переопределить.

Другие советы

Поскольку подключение состояния сеанса не управляется вашим кодом, вам не удастся переключать его.Его конфигурация уровня приложения и за пределы контроля кода.Но потребность в этом не должна возникать.Один сервер сможет управлять состоянием сеанса для всех трех доменов.Единственное беспокойство, может быть, когда пользователь перемещается из Shop1.com в Shop2.com и по-прежнему сохраняет старую сессию.

Есть ли какие-то причины, что вы не будете рассматривать работу (я прилагаю, тот же код) как три отдельных веб-приложения?

    .
  • Одна ошибка не снимает все три сайта
  • состояние сеанса разделено приложением
  • позволяет накладываться на масштабные возможности, которые могут быть выделены в разные системы, когда рост диктует
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top