多租户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
这是实体框架中的一个错误。本质上,如果发生迁移或长时间运行的任务,缓存连接字符串会允许错误的连接为另一个传入线程提供服务!
请确保已更新到6.1.2或更高版本。
干杯,Gary