【问题标题】:Asp.net MVC5 Application_Start happens every request - sometimes multiple times per requestAsp.net MVC5 Application_Start 发生在每个请求 - 有时每个请求多次
【发布时间】:2014-01-19 20:35:04
【问题描述】:

我有一个结合 Castle Windsor IoC + Nhibernate 的 MVC5 项目,

现在那里没有那么多,但是当我在 Global.asax 中调试 Application_Start 函数时,我可以看到每个请求都会命中它,

有时每隔几次就一个请求...

我了解到,如果 IIS 文件夹中的文件发生更改,可能会发生重新编译 - 但我使用的是 IIS Express - 并且不知道该文件夹在哪里。

我们曾经有一个 .mdf + LocalDb 用于我们的测试环境,所以我认为这可能是问题所在,所以我现在连接到 SqlExpress,并从解决方案中删除了 .mdf,

但还是同样的问题...

什么可能导致这种行为?以及如何进一步调查它发生的原因?

*我检查过 - 似乎即使重定向到不同的操作它也会重新加载 MVC - 登录后 Application_Start 发生 3 次......

编辑 1:

开始将所有内容添加到新项目以查找导致问题的原因,当我添加自定义 NHibernate UserStore 以用于新的 MVC5 身份时,问题出现了

public class NhUserStore : IUserStore<User>, IUserPasswordStore<User>
{
    public ISession _session;

    public NhUserStore(ISession session)
    {
        _session = session;
    }

    public Task CreateAsync(User user)
    {
        return Task.FromResult(_session.Save(user));
    }
...
}

我认为这与 Session 在 Windsor 中配置为 LifeStyle.PerWebRequest 和 NhUserStore 取决于 Session 的事实有关,但我不知道为什么

这些是我们的温莎安装程序:

public class ControllersInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Classes.FromThisAssembly()
                            .BasedOn<Controller>()
                            .LifestyleTransient());

        container.Register(Classes.FromThisAssembly()
                .BasedOn<ApiController>()
                .LifestyleScoped());
    }
}

我注意到在 MVC5 的模板中有:

    public AccountController()
        : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
    {
    }

所以我像这样使用 NH 的会话:

    public AccountController(ISession session)
        : this(new UserManager<User>(new NhUserStore(session)))
    {
    }

    public AccountController(UserManager<User> userManager)
    {
        UserManager = userManager;
    }

我现在将 UserManager 的创建更改为此并修复了一半,现在 MVC 仅在使用 UserStore 时重新启动,而不是每个请求,在使用 UserStore 的功能时仍然多次

【问题讨论】:

  • 你不能在一个空白的新 mvc5 站点上重现这个问题吗?
  • 正在尝试,到目前为止配置了windsor,仍然没有问题,现在将配置Nhibernate
  • 当我添加一个自定义的 Nhibernate UserStore 时发生,嗯
  • 尝试隔离问题并发布最小的罪魁祸首。
  • 添加了更多代码和罪魁祸首

标签: c# asp.net asp.net-mvc castle-windsor asp.net-mvc-5


【解决方案1】:

在取出代码 2 天后,我设法找到了解决方案,

我们有一个 WebApi DependencyResolver,而我读到 Mvc 和 WebApi 有一个不同的,它们应该在 Windsor 中单独配置,

我取出了自定义的 DependencyResolver,瞧 :)

我希望有一个好方法可以找出 MVC 后台发生的事情,运行状况日志只是显示它已重新启动...如果我有办法找出导致重新启动的实际异常与取出代码和重试等数小时相比,问题会很容易......

感谢大家的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多