В настоящее время у меня есть сайт, на котором могут войти пользователи, и в зависимости от их поддомена представлены разные данные из разных баз данных. Я перекрывая SqlMembershipProvider использовать строку подключения «Темп», который я динамически устанавливать во время метода Initialize, в соответствии с инструкциями этого данным сообщения:Самый простой способ реализовать эту динамическую схему входа для asp.net
http://forums.asp.net/p/997608/2209437.aspx
public override void Initialize(string name, NameValueCollection config)
{
// intercept the setting of the connection string so that we can set it ourselves...
string specifiedConnectionString = config["connectionStringName"];
ConnectionStringSettings connectionString = ConfigurationManager.ConnectionStrings[specifiedConnectionString];
var fi = typeof(ConfigurationElement).GetField("_bReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
fi.SetValue(connectionString, false);
connectionString.ConnectionString = WakeflyClientHelper.GetClientConnectionStringByCurrentSubdomain();
config["connectionStringName"] = connectionString.Name;
// Pass doctored config to base classes
base.Initialize(name, config);
}
Проблема заключается в том, что класс SqlMembershipProvider кажется «статическим «в том случае, когда несколько пользователей подключаются из разных поддоменов, они заканчивают просмотр учетных записей пользователей из ОДНОЙ из баз данных, а не каждый из них. Похоже, что Инициализация вызывается приложением, а не на основе запроса.
Итак, мой вопрос к вам ... Какой был бы самый простой способ реализовать это решение?
Я раньше не писал пользовательских поставщиков, поэтому я не уверен, как это работает, или каковы ограничения. И если я сам пишу сам, всегда есть возможность дыры в безопасности, если я пропущу что-то (не говоря уже о времени, которое потребуется). Есть идеи?
Обновление 1: У меня может быть одна база данных, однако пользователю в пределах данного поддомена требуется возможность добавлять/редактировать/удалять пользователя в пределах своего собственного домена, не видя других пользователей поддоменов. Возможно ли это по этой схеме?
Отлично! Только то, что я искал. Я просто заменил код внутри SqlConnectionHelper, чтобы всегда вызывать метод строки подключения к домену. Таким образом, он не «кэширует» первую строку соединения, с которой она инициализируется! –