在运行时为使用基本身份验证的OData/WCF数据服务更改连接字符串

Ras*_*ash 4 authentication connection wcf edmx odata

我有一个单一架构的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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Vit*_*SFT 5

在您的DataService派生类中重写CreateDataSource方法,并在其中找出正确的连接字符串,为连接字符串创建EF对象上下文的新实例并将其返回.WCF DS服务不会在EF对象上下文中使用默认构造函数,这完全取决于您使用正确的连接字符串构造实例.