[英]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.