gpt4 book ai didi

c# - 在 WCF 服务 C# 中使用静态上下文、ConcurrencyMode.Single、InstanceContextMode.PerSession 有负面影响吗?

转载 作者:行者123 更新时间:2023-11-30 23:19:15 29 4
gpt4 key购买 nike

我有一个带有静态数据上下文的 WCF 服务,但没有并发性。它已经运行了一年,没有任何问题,但前几天我们看到了一些奇怪的行为,用户正确地传递了数据,但得到了意想不到的不正确的数据。这确实通过了 F5,所以我们也在研究那里的问题。

在静态上下文中设置每个 session 单并发会不会有任何负面影响?

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.PerSession)]
public class AgencyUserManagementService : IAgencyUserManagement, IDisposable
{
private static UserDataContext _dataContext;

protected static UserDataContext Db
{
get { return _dataContext ?? (_dataContext = new UserDataContext()); }
}
}

public class UserDataContext : DbContext
{
public UserDataContext()
: base("Name=UserDataContext")
{
Database.SetInitializer<UserDataContext>(null);
}

public DbSet<TblAuthor> TblAuthors { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new TblAuthorMap());
}
}

最佳答案

Would there be any negative impacts to having Single Concurrency Per Session

对于这样配置的服务,您将看到的行为是:

  1. 为每个唯一调用者创建的服务实例,以及
  2. 每个服务实例都会对并发请求(来自单个调用者)进行排队并一个一个地处理它们。

Negative impacts to having a Static Context

接下来,在此类服务中定义的静态变量将被该服务的潜在多个实例访问。

如果您有两个并发用户,则两个用户同时使用单个静态 DbContext。

这很可能会导致一些奇怪的问题,例如您所看到的那些。

出于这个原因(以及其他原因),不建议按照您在应用程序中使用的方式使用 DbContext。

您应该为每个服务实例初始化一个新的 DbContext,这意味着上下文将不再在调用者之间共享。 Many IOC containers为 WCF session 提供插件,这可能对此有所帮助。

来源:

关于c# - 在 WCF 服务 C# 中使用静态上下文、ConcurrencyMode.Single、InstanceContextMode.PerSession 有负面影响吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40384634/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com