開發工具:VS2010,MVC4.0,SQLSERVER2008 伺服器:Windows server 2012,IIS8,SQLSERVER2012 一、發佈後,每個頁面第一次打開都很卡,50秒或更長,第二次打開就很快了 估計原因:編譯速度慢,但在有VS環境的機器上發佈沒有這麼卡 解決辦法: 使用... ...
開發工具:VS2010,MVC4.0,SQLSERVER2008
伺服器:Windows server 2012,IIS8,SQLSERVER2012
一、發佈後,每個頁面第一次打開都很卡,50秒或更長,第二次打開就很快了
估計原因:編譯速度慢,但在有VS環境的機器上發佈沒有這麼卡
解決辦法:
- 使用高版本的VS,“在發佈期間預編譯”;
- 使用IIS8的Application Initialization功能
1. 使用VS2017“在發佈期間預編譯”
發佈時遇到一個報錯:
在應用程式級別之外使用註冊為 allowDefinition='MachineToApplication' 的節是錯誤的。如果在 IIS 中沒有將虛擬目錄配置為應用程式,則可能導致此錯誤。
解決辦法:發佈時註釋web.config中的以下代碼
<!--<authentication mode="Forms"> <forms loginUrl="~/Account/Login" timeout="2880" /> </authentication>-->
2. 使用IIS8的Application Initialization功能
http://jingyan.baidu.com/article/c843ea0bb6c13877931e4a2e.html
二、ASP.NET session 頻繁丟失問題
問題現象:登錄後30秒左右會話丟失,需要重新登錄。
解決辦法:ASP.NET有幾種會話狀態模式,預設為“InProc模式”,改為“StateServer模式”,問題解除。
1. off模式
即關閉Session。
全站關閉Session可在Web.Config文件中的<system.web>節中寫入:
<sessionState mode="off">
要在某個頁面上關閉Session,可在頁面上添加:
<%@ Page EnableSessionState="false" %>
2. InProc模式(預設模式)
如果未在Web.config文件中配置SessionState Mode,預設即是InProc模式。
如果要定製InProc模式的參數,需要寫入Web.config文件,例如:
<sessionState mode="InProc" cookieless="false" timeout="20" />
cookieless設置是否允許不使用Cookie,timeout設置超時時間,單位為分鐘。
InProc模式依賴於 ASP.NET進程, 當IIS進程崩潰或者重啟時,保存在進程中的會話狀態會丟失。
3. StateServer模式
StateServer模式是將會話數據存儲到單獨的記憶體緩衝區中,由一個Windows服務“ASP.NET State Service ”(需要在windows服務中開啟)來控制這個緩衝區,需要設置stateConnectionString:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="20" />
使用StateServer模式時,所有需要保存在Session中的類,都要加上可序列化的特性:
[Serializable] public class SomeClass { }
StateServer模式的優點是獨立於IIS進程,IIS應用程式的重啟不影響會話數據。
4. SQLServer模式
使用SQL Server來保存Session,即使IIS重啟,Session仍然不會丟失。需要先創建ASPState資料庫。具體方法可在網上查詢。