簡體   English   中英

Asp.net MVC5 Application_Start每個請求都發生-有時每個請求多次

[英]Asp.net MVC5 Application_Start happens every request - sometimes multiple times per request

我有一個結合了溫莎城堡IoC + Nhibernate的MVC5項目,

現在沒有那么多了,但是當我在Global.asax中調試Application_Start函數時,我可以看到它對每個請求都有效,

有時每隔幾次就一個請求...

我讀到,如果在IIS文件夾中更改了文件,則可能會發生重新編譯-但我使用的是IIS Express-並且不知道該文件夾在哪里。

我們以前在測試環境中使用的是.mdf + LocalDb,所以我認為這可能是一個問題,因此我現在連接到SqlExpress,然后將.mdf從解決方案中刪除了,

但是仍然是同樣的問題...

是什么導致這種現象? 以及我如何進一步調查原因呢?

*我檢查了-看來,即使重定向到其他操作,它也會重新加載MVC-登錄Application_Start后發生3次...

編輯1:

開始將所有內容添加到新項目中以查找導致問題的原因,當我添加了用於新MVC5標識的自定義NHibernate UserStore時出現了問題

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));
    }
...
}

我認為這與以下事實有關:在Windsor中將Session配置為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的功能時仍然多次

在取出代碼兩天后,我設法找到了解決方案,

我們有一個WebApi DependencyResolver,而我讀到Mvc和WebApi有一個不同的版本,它們應該分別在Windsor中配置,

我取出了自定義的DependencyResolver和瞧:)

我希望有一個很好的方法來找出MVC后台發生的情況,運行狀況日志僅顯示它已重新啟動...如果我有辦法找出導致重新啟動的實際異常,則發現問題是與取出代碼和重試的時間相比,這很容易...

謝謝大家的幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM