.net – WCF序列化返回对象后关闭NHibernate会话

我有一个IIS托管的WCF服务,具有单一调用行为.

我使用Fluent NH进行数据访问并遇到以下问题.

我无法关闭/处置方法体内的NH会话,因为当序列化进入游戏时它无法访问延迟加载的字段.

我尝试使用在回答这个问题
NHibernate session management in WCF application中描述的方法,但是在序列化开始之前它也会发生它们的会话处理.

你知道在序列化完成后我是否可以在实例上下文中执行任何代码?

谢谢

最佳答案 所以我发现了一个妥协的解决方案.

我仍在使用上面链接中的IDispatchMessageInspector实现,但我以不同的方式执行扩展分离.

这是原始实现的片段

        public void BeforeSendReply(ref Message reply, object correlationState)
        {
            var extensions = OperationContext.Current.InstanceContext.Extensions.FindAll<UnitOfWorkContextExtension>();

            foreach (var extension in extensions)
            {
                OperationContext.Current.InstanceContext.Extensions.Remove(extension);
            }
        }

我将BeforeSendReply消息留空(因为它发生在序列化之前),而是在AfterReceiveRequest内部,我在实例处理程序中依赖于instanceContext.Closing和detach extension.

public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
        {
            instanceContext.Extensions.Add(new UnitOfWorkContextExtension(ServiceLocator.IoC.Retrieve<IUnitOfWorkFactory>().Create()));
            instanceContext.Closing += DetachExtension;

            return null;
        }
点赞