【问题标题】:WCF OData service against multiple databases针对多个数据库的 WCF OData 服务
【发布时间】:2015-09-29 20:21:22
【问题描述】:

我们的架构有许多数据库,都具有相同的架构。我想通过 WCF 服务为我们的 SQL Server 公开一个 odata 服务。我们正在为此实施使用实体框架 Odata 服务提供程序。

我看到了这个帖子,但是他的需求需要合并数据。

我只需要进行身份验证,然后将用户定向到存储其数据的数据库。

有谁知道如何在 odata 身份验证服务中添加一个层,以根据经过身份验证的用户将连接字符串设置为正确的数据库?

【问题讨论】:

  • 嗯,看起来微软宁愿你使用 web api 来实现 Odata 服务。如果我找到使用 web api 和 Odata 的解决方案,我会回复。

标签: c# .net sql-server wcf wcf-data-services


【解决方案1】:

我切换到 Web Api 2 和 Odata 集成。

进入 Web Api 后,您可以创建过滤器以挂钩并添加逻辑以选择特定数据库。

我还可以使用内置的 OAuth2 进行身份验证。

public class MyOdataController : ODataController
{
    protected AMMetricsEntities db;
    protected EntityConnection ec;
    protected IEnumerable<Claim> claims;
    protected long userId;
    protected string userName;

    private string GetConnectionString(string dbId, string dbName)
    {
        // this is where we get token from header information and populate the connection string
        return
            String.Format(
                "metadata=res://*/Models.AMModel.csdl|res://*/Models.AMModel.ssdl|res://*/Models.AMModel.msl;" +
                "provider=System.Data.SqlClient;" +
                "provider connection string='data source={0};initial catalog={1};persist security info=True;user id={2};password={3};" +
                "multipleactiveresultsets=True;application name=EntityFramework'",
                dbServer,
                dbName,
                Username,
                Password);
    }

    public MyOdataController()
    {

        claims = ((ClaimsIdentity)User.Identity).Claims;
        if (claims.Any())
        {
            userId = Convert.ToInt64(User.Identity.GetUserId());
            userName = User.Identity.GetUserName();

            var dbName = claims.Where(s => s.Type == "DBName").Select(c => c.Value).First();
            var dbServer = claims.Where(s => s.Type == "DBServer").Select(c => c.Value).First();

            ec = new EntityConnection(GetConnectionString(dbServer, dbName));
            db = new ProductEntities(ec, false);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多