【问题标题】:OWIN Startup being called on each page request在每个页面请求上调用 OWIN Startup
【发布时间】:2015-06-24 19:55:18
【问题描述】:

我正在使用 OWIN 的 WebAPI 2 项目中实现 NHibernate 会话工厂。下面是我的启动课程的 sn-p。我注意到每次在调试环境中加载页面时都会调用 Startup。这似乎非常昂贵,并且 SessionFactory 应该在每个应用程序生命周期内只创建一次。

如何避免这种情况?我认为重复的电话引起了问题。我收到的错误似乎与在 OWIN 中多次创建的会话工厂有关。

Public Class Startup
    Public Sub Configuration(app As IAppBuilder)
        GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)

        app.CreatePerOwinContext(AddressOf MobLib.MobDataProvider.CreateProvider)

    End Sub
End Class

更新 我已经确认Configuration 只运行一次,但每次页面加载时都会调用CreateProvider。这是设计的吗?

【问题讨论】:

  • 希望您不要从某个地方自己调用 Startup 类方法的 Configuration 方法,因为它是自动可检测的。
  • Configuration 没有在任何地方显式调用,仅通过检测。
  • 你能在 POC 中复制它并分享吗?我真的很想知道为什么会这样,因为这并不常见。
  • 现在深入研究它。我只是希望这是其他人犯的一个愚蠢的错误,可以启发我:)

标签: nhibernate asp.net-web-api2 owin


【解决方案1】:

我将回答我自己的问题,而不是删除它来掩饰我的耻辱——我的意思是,为了后代!

一切都在按应有的方式运行,CreatePerOwinContext 完全按照它所说的去做。每次创建上下文时它都会调用该函数。对于像NHibernate SessionFactory 这样的重物,这不是您想要的——尤其是因为这可能会导致多个会话工厂。我不知何故认为 OWIN 上下文是我应该存储这个 Singleton 对象的地方,但它绝对不是。

这提出了真正的问题:我应该将初始化代码放在 OWIN Startup 方法还是 Global.asax 文件中。那是一个完全不同的问题,在很多地方都可以看到。例如:Do I need a Global.asax.cs file at all if I'm using an OWIN Startup.cs class and move all configuration there?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多