我有一个具有单一架构的ODATA服务。这些指向开发数据库,并通过WCF数据服务提供服务,然后由运行Excel / Powerpivot的客户端使用它来获取报告等自己的数据。
该服务在运行时通过几乎相同的基本身份验证进行保护:http://msdn.microsoft.com/en-us/data/gg192997
现在,如何在实时环境中工作,它位于服务器上,并根据提供的用户名/密码连接到不同的数据库。用户将输入'username @ clientID'和'password'。然后对'username @ clientID'进行split(),并根据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;
}
}
答案 0 :(得分:5)
在您的DataService派生类中重写CreateDataSource方法,并在其中找出正确的连接字符串,为连接字符串创建EF对象上下文的新实例并将其返回。 WCF DS服务不会在EF对象上下文中使用默认构造函数,这完全取决于您使用正确的连接字符串构造实例。
答案 1 :(得分:1)
在svc.cs
文件中添加以下内容:
protected override NorthWindEntity CreateDataSource()
{
System.Data.EntityClient.EntityConnection connection = new System.Data.EntityClient.EntityConnection();
connection.ConnectionString = "";
NorthWindEntity ctx = new NorthWindEntity(connection);
return ctx;
}