【问题标题】:Use Autofac with WCF service with InstanceContextMode = PerSession通过 InstanceContextMode = PerSession 将 Autofac 与 WCF 服务一起使用
【发布时间】:2012-11-01 04:55:03
【问题描述】:

我有一个带有 ServiceBehavior.InstanceContextMode = InstanceContextMode.PerSession 的 WCF 服务。

我如何需要向 Autofac 注册服务才能为每个新会话获取一个新实例,但在会话中使用相同的实例? 我目前正在使用以下配置,它会导致类似PerCall 的行为:

builder.Register(c => new ChannelFactory<IUserService>()).SingleInstance();
builder.Register(c => c.Resolve<ChannelFactory<IUserService>>().CreateChannel())
       .UseWcfSafeRelease();
builder.RegisterType<UserService>().AsImplementedInterfaces();

【问题讨论】:

  • 您使用的是哪种绑定方式。 basicHttpBinding 不支持PerSession 行为。此外,WCF 已经通过管理会话来照顾自己。
  • 确实,我用basicHttpBinding
  • 最简单的解决方案是将绑定更改为 wsHttpbinding。我不在家,但你可以在 wcf 中找到大量用于绑定的资源
  • 请发布您的 cmets 作为答案,我会接受它。我不知道 basicHttpBinding 不支持 PerSession。

标签: c# .net wcf autofac


【解决方案1】:

正如我们在 cmets 期间发现的,您使用的是 basicHttpBinding。 basicHttpBinding 不支持ServiceBehavior.InstanceContextMode = InstanceContextMode.PerSession 会话行为。有关绑定的更多详细信息,请查看MSDN Documentation

我还想补充的是,WCF 会自动跟踪其会话,如果您关闭代理并再次重新打开,您将获得相同的会话。 (如果您的绑定当然支持它)。只有当客户端关闭时,您的会话才会在 WCF 中自动终止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多