我使用每个会话绑定在同一个IIS应用程序中托管了多个WCF服务。所有这些服务都使用相同的数据库。我正在使用Unity for DI,并将会话工厂注册为singleton(ContainerControlledLifeTimeManager
)。我正在使用NHibernate 3 WcfSessionContext
。
我的服务遇到了麻烦,因为当一个服务被调用时,使用先前服务注册的会话工厂只需切换上下文(之前的服务名为get,而不会在其上下文中注册会话工厂)。
我设法使用会话工厂的共享字典来解决问题,因此每个服务都有自己的会话工厂,所有这些服务都针对同一个数据库。
这让我觉得为所有这些WCF服务创建一个会话工厂可能会更好,但我不知道这是否可行,或者是否更喜欢每个服务都有一个会话工厂,尽管它们都是使用相同的underliyng数据库。
作为旁注,这些服务在控制台主机版本中与同一会话工厂一起正常工作。只有在IIS中部署时才会出现问题。
答案 0 :(得分:0)
您应该为所有服务都有一个SessionFactory。 SessionFactory是线程安全的。你可以把它放到静态字段然后,注入一个总是返回相同SessionFactory的deletage工厂。实际上,不是注入SessionFactory,而是更好地注入ISession本身。