我有一个支持多个租户的标准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来访问当前的Request并提取租户。
任何人都可以在上面的代码中看到任何内容,或者在我使用HttpContext.Current时可能导致为任何特定请求提取错误的租户?
问题可能发生在离数据层更近的地方,但租户总是传递到数据层,以便将查询定向到正确的数据库,因此我确信有时会返回错误的租户。
非常感谢, 加里
答案 0 :(得分:1)
这是实体框架中的一个错误。基本上,如果发生迁移或长时间运行的任务,连接字符串的缓存允许错误的连接来服务另一个传入的线程!
确保您已更新至6.1.2或更高版本。
干杯, 加里