У меня есть службы ODATA с единой схемой. Они указывают на базу данных разработки и обслуживаются службой данных WCF, которая затем используется клиентами, работающими с Excel / Powerpivot, для получения собственных данных для отчетов и т. Д.
Служба защищена во время выполнения с помощью той же базовой проверки подлинности, которая описана здесь: http://msdn.microsoft.com/en-us/data/gg192997
Теперь, как это должно работать в реальной среде, это сидеть на сервере и подключаться к разным базам данных на основе предоставленного имени пользователя и пароля. Пользователи будут вводить «имя пользователя @ clientID» и «пароль». 'username @ clientID' затем разделяется (), а имя пользователя / пароль проверяется по базе данных SQL. Но URL-адрес сервера базы данных для проверки будет определяться ClientID.
Кроме того, после авторизации службе данных WCF необходимо вернуть данные из базы данных, соответствующие ClientID.
Подход, который я пробовал, заключался в изменении строки подключения в файле web.config, но это не работает, потому что в нем говорится, что файл доступен только для чтения. Я даже не уверен, сработало бы это вообще. Что мне нужно сделать, так это заставить службу данных EDMX / WCF возвращать данные из правильной базы данных. Вот что я пытался сделать:
private static bool TryAuthenticate(string user, string password, out IPrincipal principal)
{
Configuration myWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
myWebConfig.AppSettings.Settings["test"].Value = "Hello";
myWebConfig.Save();
string newConnStr = myWebConfig.ConnectionStrings.ConnectionStrings["IntelCorpEntities"].ToString();
newConnStr.ToString().Replace("SERGEIX01", "SERVERX01");
myWebConfig.ConnectionStrings.ConnectionStrings["IntelCorpEntities"].ConnectionString = newConnStr;
myWebConfig.Save();
if (user.ToLower().Equals("admin") && password.Equals("password"))
{
principal = new GenericPrincipal(new GenericIdentity(user), new string[] { "Users" });
return true;
}
else
{
principal = null;
return false;
}
}