簡體   English   中英

在VS2012中更改標記后,ASP.Net Inproc會話重新啟動

[英]ASP.Net Inproc session restarted after markup change in VS2012

我將我的開發機器升級到Windows 8和Visual Studio 2012。

我正在本地IIS上測試我的ASP.Net應用程序(也升級到.net 4.5)。

令我煩惱的一件事是,我的上一次配置(Windows 7,VS 2010,.net 4.0)不是這種方式,是在標記文件發生更改后重新啟動InProc會話。

示例:我已登錄到我的本地ASP.net應用程序,在* .ascx文件中創建並保存更改,刷新我的webbrowser並且會話消失了。

如何關閉會話重啟問題?

編輯 :我嘗試使用新的VS 2012 Web應用程序項目模板重新解決此問題,刪除了不必要的內容,但無法重現此問題。

但是,在我的真實項目中,問題仍然存在:對aspx或ascx文件的更改會導致Application_Start事件被觸發。

我還將我的真實項目中的web.config剝離到最低限度,看起來像是新項目中的那個,但是這也不允許我刪除錯誤。 我在web.config中注釋的內容是DevExpress Controls,自定義healthMonitoring,IIS UrlRewrite 2

Applicationpool為Integrated,v4.0,NetworkService為Identity

我不會嘗試采取信用為這一點,但答案是埋在通過@原來問題的意見第11 阿南德

在web.config中添加此密鑰:

<appSettings><add key="PageInspector:ServerCodeMappingSupport" value="Disabled" /></appSettings>

而問題就消失了。 VS也變得更加敏感。 唯一的缺點是你從Page Inspector失去了服務器端的詭計。

希望MS能盡快提供解決方案..

這里的問題是您的應用程序正在進行動態編譯,這意味着對標記文件的任何更改都將導致應用程序重新啟動。 如您所知,任何應用程序重新啟動都將轉儲InProc會話。

本地模板上的“Web應用程序”設置不同,因此不會重新啟動整個應用程序。 雖然有預編譯的優點。

有幾種方法可以解決這個問題。

為什么會這樣

ASP.NET 4.5允許您默認情況下與“Web應用程序”並行運行“網頁”。 這可能是導致aspx發生更改以觸發預先發布的原因(每次發生更改時“網頁”必須執行此操作)。 更多信息: http//msdn.microsoft.com/en-us/library/dd547590.aspx

在新版本中優化Web服務器也有很多變化。 您可以在此處查看這些更改的詳細信息,還可以在升級時解釋更改。 http://www.asp.net/vnext/overview/aspnet/whats-new

無論如何,解決方案仍然是相同的,並且不建議動態更新單個aspx文件。 如果這是不可避免的,那么最終將在任何設置上重新啟動,所以無論如何都值得使用以下解決方案之一。

解決方案

編譯模式

檢查web.config中的CompilationMode。 欲了解更多信息,請查看這篇文章http://www.campusmvp.net/compilationmode-avoiding-aspx-page-compilation-to-improve-scalability-in-sites-with-thousands-of-pages/

這也可以在服務器級別設置,以便您可以通過環境獲得差異。

會話狀態模式

您可以在StateServer模式下或使用Sql server運行會話狀態。 如果安裝了.net,則ASP.NET狀態服務器將位於您的服務器上,只需將其設置為自動啟動。 然后,您可以在配置中切換它。

<sessionState mode="StateServer" useHostingIdentity="true" cookieless="false" timeout="120" stateConnectionString="tcpip=127.0.0.1:42424" />

我們總是使用ASP.NET狀態服務器進行開發,在很多情況下都是在生產中運行。 我發現在測試長用戶路徑時(比如一個有很多表單的表單向導),每次重建時都會討論會話,這非常煩人。 這也意味着你不會因重啟app而失去會話。

您也可以以相同的方式使用SQL Server。

注意:您必須記住,如果要將類序列化為會話狀態並進行更改,則需要手動重新啟動狀態服務器,否則將出現序列化錯誤。 這是非常罕見的,但只是在生產環境中要注意。

使用進程內模式時,會話數據托管在服務器內存中。 您應該在IIS上驗證應用程序池的回收時間。

干杯,

您可以嘗試SQL服務器會話狀態模式。

一個可能相關的問題:IIS(以及ASP.NET Development Server)在您從TFS 簽出文件后重新啟動應用程序。

我在這里找到了解決方案: http//forums.iis.net/p/1200785/2055480.aspx/1?IIS+Express+restarts+site+when+a+file+is+checked+out

  1. 導航到: %USERPROFILE%\\ AppData \\ Roaming \\ Microsoft \\ VisualStudio \\ 11.0
  2. 刪除app_offline.htm文件。
  3. 創建名為app_offline.htm的文件夾

暫無
暫無

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

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