WCF、NHibernate 和 Ninject 的每个请求会话实现

2023-12-21

我正在尝试在我的 WCF 应用程序中实现每个请求会话模型,并且我已经阅读了无数有关此主题的文档,但似乎没有完整的演示。我实际上遇到了一些非常有用的文章,例如这篇文章:

NHibernate 的 ISession,范围为单个 WCF 调用 http://realfiction.net/go/133

但这些都是过去的事情,当时 NHibernate 和 Ninject 没有 WCF 特定的实现,因此他们通过实现自定义服务提供者等来实现我所需要的。由于 Ninject 和 NHibernate 现在都有 WCF 支持,我想保持一致通过使用他们的模块,但我最终来到了这里......

基本设置和流程应该是这样的:

  1. 在 nhibernate 配置中将 CurrentSessionContext 设置为 WcfOperationSessionContext
  2. 在服务启动、开始请求或初始化时间附近的任何地方,打开会话并将其绑定到当前上下文
  3. 存储库使用 SessionFactory.GetCurrentSession() 方法获取当前会话实例
  4. 在生命周期结束时解除绑定并关闭会话

我最初的问题是我无法访问 wcf 生命周期来处理我的绑定。在深入研究 ninject 代码后,我设法将我的方法挂接到 ServiceHost 的打开/关闭事件,而无需进行太多更改,但随后我无法访问 OperationContext,因为它是线程静态的。

后来我尝试启用 asp.net 兼容性并使用 Application_BeginRequest 和 Application_EndRequest,它看起来非常有前途,但我不认为这是最好的解决方案,因为我应该将内容绑定到服务实例,而不是 http 请求。

有没有人使用 ninject 的内置 wcf 扩展库实现过这一点?或者对我可能做错了什么有什么想法?


我已经在以下的帮助下实现了每个请求的会话生命周期IDispatchMessageInspector http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.idispatchmessageinspector.aspx。 也许您可以为 Ninject 实现自定义生命周期管理器来实现每个 Web 请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF、NHibernate 和 Ninject 的每个请求会话实现 的相关文章

随机推荐