Asp.net MVC5 Application_Start发生在每个请求中 - 有时每次请求多次

时间:2014-01-19 20:35:05

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

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

现在那里没有那么多,但是当我在我的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但我不明白为什么

这些是我们的Windsor安装人员:

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的功能时仍然多次

1 个答案:

答案 0 :(得分:1)

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

我们有一个WebApi DependencyResolver,而我读到的是Mvc和WebApi的另一个,它们应该分别在Windsor中配置,

我拿出了自定义的DependencyResolver并且瞧瞧:)

我希望有一个很好的方法可以找出MVC背景中发生的事情,健康日志只显示它已重新启动...如果我有办法找出导致重启找到的实际异常与拿出代码和重试等的小时数相比,问题会很容易......

感谢大家的帮助