1. 程式人生 > >ASP.Net 各類網站第一開啟慢的問題解決方案

ASP.Net 各類網站第一開啟慢的問題解決方案

問題現象

==========

ASP.NET頁面第一次訪問的時候很慢,時間可以持續幾十秒到幾分鐘

首先,釋出使用預編譯,並且不允許更新程式集選項。

問題原因

==========

當程式裡面需要呼叫到一些Authenticode Signed的.NET Assembly的時候,它需要連線到外網來驗證數字證書。當伺服器是無法連線到外網時,這個校驗證書的過程需要等到timeout之後才會結束。

解決辦法

==========

建議採用以下方法中的任何一種

請同時在以下兩個aspnet.config檔案中加入以下內容。

C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet.config

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet.config

<?xml version="1.0" encoding="utf-8"?>

<configuration>

        <runtime>

                        <generatePublisherEvidence enabled="false"/>

        </runtime>

</configuration>

匯入以下注冊表鍵值並重起IIS服務

Windows Registry Editor Version 5.00

[HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing]

"State"=dword:00023e00

詳細分析

==========

這個時候如果我們抓取一個hang dump的話,頁面所對應的managed callstack往往如下,很明顯它正在載入一個Assembly

0:022> !CLRStack

OS Thread Id: 0xeb4 (22)

Child-SP         RetAddr          Call Site

000000001af1c900 000007fef91747c3 System.Reflection.Assembly.InternalLoad(System.Reflection.AssemblyName, System.Security.Policy.Evidence,

System.Threading.StackCrawlMark ByRef, Boolean)

000000001af1c990 000007ff0141f0f9 System.Reflection.Assembly.Load(System.Reflection.AssemblyName)

000000001af1c9d0 000007fef9fdd502 Microsoft.SharePoint.Portal.WebControls.StringResourceManager..cctor()

000000001af1db50 000007ff014135e2 Microsoft.SharePoint.Portal.WebControls.MySiteLinkUserControl.SetControl()

000000001af1dce0 000007fef398e04f Microsoft.SharePoint.Portal.WebControls.MySiteLinkUserControl.OnInit(System.EventArgs)

000000001af1de80 000007fef398f3af System.Web.UI.Control.InitRecursive(System.Web.UI.Control)

000000001af1dee0 000007ff014133c8 System.Web.UI.Control.AddedControl(System.Web.UI.Control, Int32)

000000001af1df50 000007ff0134115e Microsoft.SharePoint.WebControls.DelegateControl.AddControlResilient(System.Web.UI.Control)

000000001af1dff0 000007fef398fb22 Microsoft.SharePoint.WebControls.DelegateControl.CreateChildControls()

000000001af1e170 000007ff01341024 System.Web.UI.Control.EnsureChildControls()

000000001af1e1d0 000007fef398e04f Microsoft.SharePoint.WebControls.DelegateControl.OnInit(System.EventArgs)

000000001af1e210 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)

000000001af1e270 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)

000000001af1e2d0 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)

000000001af1e330 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)

000000001af1e390 000007fef398e147 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)

000000001af1e3f0 000007fef398a935 System.Web.UI.Control.InitRecursive(System.Web.UI.Control)

000000001af1e450 000007fef398a1f0 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)

000000001af1e520 000007fef398a11b System.Web.UI.Page.ProcessRequest(Boolean, Boolean)

000000001af1e580 000007fef398a0b0 System.Web.UI.Page.ProcessRequest()

000000001af1e5e0 000007fef3991557 System.Web.UI.Page.ProcessRequest(System.Web.HttpContext)

000000001af1e640 000007fef395567b System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

000000001af1e6f0 000007fef39634b5 System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)

000000001af1e790 000007fef3954733 System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception)

000000001af1e840 000007fef3958a54 System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback,

System.Object)

000000001af1e8a0 000007fef395863c System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest)

000000001af1e930 000007fef395726c System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest)

000000001af1e970 000007fef9fdd502 System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32)

其實它所要載入的Assembly名字如下

Microsoft.SharePoint.Portal.intl

此執行緒所對應的native callstack如下

0:022> k20

Child-SP          RetAddr           Call Site

00000000'1af1a208 000007fe'fdc610ac ntdll!ZwWaitForSingleObject+0xa

00000000'1af1a210 000007fe'f5dfa2fa KERNELBASE!WaitForSingleObjectEx+0x79 00000000'1af1a2b0 000007fe'f5df76fa cryptnet!CryptRetrieveObjectByUrlWithTimeout+0x263

00000000'1af1a5b0 000007fe'f5df4646 cryptnet!CryptRetrieveObjectByUrlW+0x20f 00000000'1af1a7a0 000007fe'f5df9c34 cryptnet!RetrieveObjectByUrlValidForSubject+0x162 00000000'1af1a8d0 000007fe'f5df4243 cryptnet!RetrieveTimeValidObjectByUrl+0x2de 00000000'1af1a9c0 000007fe'f5df3c72 cryptnet!CTVOAgent::GetTimeValidObjectByUrl+0x2e3 00000000'1af1ab20 000007fe'f5df38ad cryptnet!CTVOAgent::GetTimeValidObject+0x7cf

00000000'1af1ad00 000007fe'f5df3810 cryptnet!FreshestCrlFromCrlGetTimeValidObject+0x61

00000000'1af1ad70 000007fe'f5df99fc cryptnet!CryptGetTimeValidObject+0xb0 00000000'1af1adf0 000007fe'f5df345d cryptnet!GetTimeValidCrl+0x4b7

00000000'1af1af30 000007fe'f5df3f82 cryptnet!GetBaseCrl+0x7d 00000000'1af1afc0 000007fe'f5df3d58 cryptnet!MicrosoftCertDllVerifyRevocation+0x238

00000000'1af1b110 000007fe'fdb157c7 cryptnet!CertDllVerifyRevocation+0x28

00000000'1af1b160 000007fe'fdb1552e crypt32!VerifyDefaultRevocation+0x398 00000000'1af1b250 000007fe'fdb15c09 crypt32!CertVerifyRevocation+0x144

...

00000000'1af1bcc0 000007fe'f9e46c27 mscorwks!PEFile::CheckSecurity+0x39b924

00000000'1af1bd50 000007fe'f9e5eb5d mscorwks!PEAssembly::DoLoadSignatureChecks+0x37

00000000'1af1bd90 000007fe'f9e52ff8 mscorwks!PEAssembly::PEAssembly+0x12d 00000000'1af1be00 000007fe'f9e40b9d mscorwks!PEAssembly::DoOpen+0x11c 00000000'1af1c130 000007fe'f9f24a3e mscorwks!PEAssembly::Open+0x71

從這些函式名我們知道它正在做一些證書檢查之類的事情。而實際上它正在等待下面的這個執行緒。

0:036> kn

# Child-SP          RetAddr           Call Site

00 00000000'2409e1c8 000007fe'fdc610ac ntdll!ZwWaitForSingleObject+0xa

01 00000000'2409e1d0 000007fe'f5d7f38e KERNELBASE!WaitForSingleObjectEx+0x79

02 00000000'2409e270 000007fe'f5d80a27 winhttp!IsWpadEnabledForConnectedNetworks+0x1f2

03 00000000'2409e340 000007fe'f5d806dc winhttp!ReadWinInetProxySettings+0x1c3

04 00000000'2409e3c0 000007fe'f5dfae42 winhttp!WinHttpGetIEProxyConfigForCurrentUser+0x28a

05 00000000'2409e510 000007fe'f5df9237 cryptnet!InetGetProxy+0x11e

06 00000000'2409e600 000007fe'f5df983d cryptnet!InetSendAuthenticatedRequestAndReceiveResponse+0x190

07 00000000'2409f770 000007fe'f5df9d9c cryptnet!InetSendReceiveUrlRequest+0x57e

.....

0:036> .frame 7

07 00000000'2409f770 000007fe'f5df9d9c cryptnet!InetSendReceiveUrlRequest+0x57e [d:\w7rtm\ds\security\cryptoapi\pki\rpor\inetsp.cpp @ 2603]

0:036> dv

              hInetSession = 0x00000000'218211f0

          dwRetrievalFlags = 1

              pCredentials = 0x00000000'00000000

                      pcba = 0x00000000'2409fab0

            ppfnFreeObject = 0x00000000'2409fb38

            ppvFreeContext = 0x00000000'2409fb30

                  pAuxInfo = 0x00000000'1f8abd78

             phInetRequest = 0x00000000'00000000

Zhi Xing - 微軟APAC技術支援中心 Internet Developer Support Team

相關推薦

ASP.Net 各類網站第一開啟的問題解決方案

問題現象 ========== ASP.NET頁面第一次訪問的時候很慢,時間可以持續幾十秒到幾分鐘 首先,釋出使用預編譯,並且不允許更新程式集選項。 問題原因 ========== 當程式裡面需要呼叫到一些Authenticode Signed的.NET

asp.net MVC 常見安全問題及解決方案

container coo baidu his ring article 調試工具 並且 part asp.net MVC 常見安全問題及解決方案一.CSRF (Cross-site request forgery跨站請求偽造,也被稱為“one click attack”或

ASP.NET Ajax 跨域問題最佳解決方案

通過設定Access-Control-Allow-Origin來實現跨域。 例如:客戶端的域名是client.runoob.com,而請求的域名是server.runoob.com。 如果直接使用ajax訪問,會有以下錯誤: XMLHttpRequest cannot

asp.net基礎-xss發貼漏洞解決方案

解決方案:在顯示頁面的伺服器端程式改為 protected void Page_Load(object sender, EventArgs e)     {         //Response.Write(File.ReadAllText("c:/5.txt"));         string s = F

VS2013新建asp.net網站專案失敗,配置IISexpress失敗,未能找到web伺服器“http://localhost”解決方案

前兩天用vs2013新建asp.net空網站時失敗了出現這個問題: 於是我上網搜尋關鍵字“配置IISexpress失敗,未能找到web伺服器“http://localhost”,結果是這樣滴 並沒有我這個問題的解決辦法,然後我就只能死馬當活馬醫,隨便試試了,說不定就好了呢。有一個

解決ASP.NET Core網站 釋出按鈕不能用的問題

1.安裝從IIS到Kestrel server的反向代理, 2.安裝完後重啟服務,用管理員許可權開啟命令列: 輸入  net stop was /y執行完後再執行net start w3svc3.重

針對Linux ASP.NET MVC網站中 httpHandlers配置無效的解決方案

近期有Linux ASP.NET使用者反映,在MVC網站的Web.config中新增 httpHandlers 配置用於處理自定義型別,但是在執行中並沒有產生預期的效果,伺服器返回了404(找不到網頁)錯誤。經我親自測試,在WebForm網站中,httpHandlers節點的配置是有效的,而在MVC中的確無效

【踩坑經歷】一次Asp.NET網站部署踩坑和解決經歷

  2013年給1個大學的小客戶部署過一個小型的Asp.NET網站,非常小,用的sqlite資料庫,今年人家說要換臺伺服器,要重新部署一下,好吧,雖然早就過了服務時間,但無奈誰叫人家是客戶了,二話不說,上,原始碼和以前的檔案都有,部署還不是分分鐘的事情,開啟IIS掛上去就行了。誰知道,這個部署將近花了2天的時

ASP.NET Core 網站發布到Linux服務器(轉)

asp.net list oot module func iis 春天 window comment 出處;ASP.NET Core 網站發布到Linux服務器 長期以來,使用.NET開發的應用只能運行在Windows平臺上面,而目前國內蓬勃發展的互聯網公司由於成本的考慮

asp.net Global.asax 不運行解決

ima png net 解決方法 publish 解決 alt sax img asp.net application的站點發布後 Global.asax 未運行,搞了好久終於解決, 解決方法如下: publish設置 該設置經測試在win server

asp.net 獲取網站根地址

1 public static string GetSiteRoot() 2 { 3 string port = System.Web.HttpContext.Current.Request.ServerVariables["SERVER_PORT"];

asp.net 獲取網站根地址

web ext sys 網站 system bsp serve req cat 1 public static string GetSiteRoot() 2 { 3 string port = System.Web.HttpC

asp.net iis網站播放不了視訊和不能訪問json檔案

需要在web.config新增支援mp4播放和json檔案訪問節點 <configuration>     <system.webServer>         <staticContent> &

asp.net釋出網站的詳細步驟

1、用VS2013開啟解決方案。      2、選中解決方案,點選滑鼠“右鍵”—>從彈出對話方塊中,選擇“清理解決方案”。 3、待第2步“清理解決方案”結束後,選中“解決方案”—>點選滑鼠“右鍵”—>在彈出對話方塊中,選擇“重新生

使用cmd命令在IIS上部署Asp.Net core網站

    由於是外包專案需要實施人員去現場部署IIS網站,所以就想做個批處理檔案去一鍵執行安裝部署IIS網站。於是就有了這篇文章。廢話少說先上程式碼。 echo Please use administrator privileges to run. ::請使用管理員許可權執行

C# 無法向會話狀態伺服器發出會話狀態請求。請確保 ASP.NET State Service (ASP.NET 狀態服務)已啟動"問題解決方法

異常詳細資訊: System.Web.HttpException: 無法向會話狀態伺服器發出會話狀態請求。請確保已啟動 ASP.NET State service,並且客戶端和伺服器埠是相同的。如果伺服器位於遠端計算機上,請檢查 HKEY_LOCAL_MACHINE\SYST

教你如何在Server2003上部署一個Asp.Net網站

最近公司走掉了兩個軟體測試人員,同時這兩個人還肩負著為客戶部署為客戶部署環境的任務,於是這個為客戶部署環境這樣艱鉅的任務就落在了剛來的一個客服小姑娘身上,由於小姑娘剛來公司不久,對網站部署方面不是很清楚,所以決定寫一個傻瓜文件,萬一以後還遇到這樣的情況,就不用總是口述這麼麻煩了。寫的不好大家嘴下留情,謝謝。

asp.net 呼叫帶證書的webservice解決辦法

最近在朋友弄一個調整省政府政務工作流的程式。。 需要把當前的資訊推送到政務網上,採用的是帶證書的https webservice。。 下面說一下實現過程 第一步,引用webservice地址,刪除web.config中相關配置。同時安裝好證書 用如下資料替換:

centos7下linux執行asp.net,c#網站搭建配置-mono+nginx

centos7下linux執行asp.net,c#網站搭建配置-mono+nginx 一、首先安裝一些需要的軟體包 首先更新CentOS上的軟體包: yum –y update 安裝一些需要的庫: yum -y install gcc gcc-c++ bison pkgconfig glib2-de

centos7下linux運行asp.net,c#網站搭建配置-mono+nginx

server 3.0 正常 document local fire tle pan path centos7下linux運行asp.net,c#網站搭建配置-mono+nginx 一、首先安裝一些需要的軟件包 首先更新CentOS上的軟件包: yum –y update 安