.net - WCF序列化返回对象后关闭NHibernate session

标签 .net wcf serialization

我有一个 IIS 托管的 WCF 服务,具有单次调用行为。
我使用 Fluent NH 进行数据访问并面临以下问题。
我无法在方法体内关闭/处理 NH session ,因为当序列化进入游戏时,它无法访问延迟加载的字段。
我尝试使用回答中描述的方法来回答这个问题 NHibernate session management in WCF application但它的 session 处理也发生在序列化开始之前。

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

谢谢

最佳答案

所以我找到了一个折衷的解决方案。
我仍在使用上面链接中的 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 并在事件处理程序中分离扩展
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;
        }

关于.net - WCF序列化返回对象后关闭NHibernate session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4850015/

相关文章:

c# - 检查 Object 是 Task 还是 Task<TResult>

c# - 使用 C# 检查 IIS 中是否启用了表单例份验证

c# - .NET 图像压缩

.net - 为什么JSON.NET默认的DateTime序列化已更改?

c# - 如何使用 NHibernate 检索列表中具有条件的元素

c# - Catch-22 阻止了 WIF 保护的流式 TCP WCF 服务;毁了我的圣诞节,心理健康

c# - WCF 应用端点

c++ - 如何将 C++ COM 连接到 WCF 服务

java - 将序列化的结果分配给变量

java - Object.class.getName() 慢吗?