我有一个 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/