多租户MVC应用程序有时会提供错误的租户

本文关键字:错误 MVC 应用程序 | 更新日期: 2023-09-27 18:30:03

我有一个支持多租户的标准ASP.NET MVC应用程序。该代码已经生产了几个月,我发现,有时会以完全随机的间隔(无法重现问题),从错误的租户那里为另一个租户获取数据。

例如,Tenant1登录,但他们从我们的网络应用程序收到一个cookie,其中包含Tenant2数据库中的信息!

我的基本控制器使用以下代码提取所需的租户:

    protected override void Initialize(RequestContext requestContext)
    {
        string tenant = String.Empty;
        tenant = requestContext.Request.Headers["Host"].Split(':')[0];
        if (tenant.Contains(".")) tenant = tenant.Substring(0, tenant.IndexOf("."));
        base.Initialize(requestContext);
    }

这在99.9%的情况下都有效。所以我无法想象这就是问题所在。当我在自定义cookie中存储值时,我唯一能识别出可能出错的地方。我必须使用HttpContext.Current来访问当前请求并提取租户。

有人能在上面的代码中,或者在我使用HttpContext.Current时看到任何可能导致为任何特定请求提取错误租户的内容吗?

这个问题可能发生在数据层附近,但租户总是被传递到数据层,以便将查询引导到正确的数据库,所以我确信有时会返回错误的租户。

非常感谢,Gary

多租户MVC应用程序有时会提供错误的租户

这是实体框架中的一个错误。本质上,如果发生迁移或长时间运行的任务,缓存连接字符串会允许错误的连接为另一个传入线程提供服务!

请确保已更新到6.1.2或更高版本。

干杯,Gary