hostingEnvironment與宿主環境

来源:http://www.cnblogs.com/HopeGi/archive/2016/09/21/5893180.html
-Advertisement-
Play Games

定義用來控制應用程式宿主環境的行為的配置設置。 配置如下 shadowCopyBinAssemblies:該值指示 Bin 目錄中的應用程式的程式集是否影像複製到該應用程式的 ASP.NET 臨時文件目錄中。但純看這句話我是一面懵懂的,幸虧看了一篇老外的文章經過自己實踐才明白其作用。平時我們更新bi ...


定義用來控制應用程式宿主環境的行為的配置設置。

   

配置如下

<hostingEnvironment 
idleTimeout="HH:MM:SS" 
shadowCopyBinAssemblies="true|false" 
shutdownTimeout="number"
urlMetadataSlidingExpiration="HH:MM:SS"
/>

 

shadowCopyBinAssemblies:該值指示 Bin 目錄中的應用程式的程式集是否影像複製到該應用程式的 ASP.NET 臨時文件目錄中。但純看這句話我是一面懵懂的,幸虧看了一篇老外的文章經過自己實踐才明白其作用。平時我們更新bin文件夾的內容時,無需重啟網站則會生效,原因就是ASP.NET對bin文件夾進行監控,當發現bin文件夾時則會馬上更新網站,這個功能就是靠shadowCopyBinAssemblies來控制的,一但設成false,想在網站運行的時候就會把bin文件夾里的文件進行鎖定,無法隨時更新,更不用說馬上生效。這個設置的使用場景在於更新bin文件的內容過多,導致影響了網站的性能。

idleTimeout:卸載不活動的應用程式前設置時間值,格式為HH:MM:SS 或"不限"。 預設值為"Infinite"。然而這裡有個不恰當的地方,格式並非是,因為如下圖

而給他設置的值實際是int值,單位是分鐘,這個idelTimeout特性的作用是關閉掉空閑時間達到設定值的分鐘值的appdomain。為此鄙人故意做了個實驗

在Global.asax中添加代碼,用於監控Application被關閉時候記錄時間和原因

protected void Application_End()

{

File.AppendAllText(@"E:\Application_End.txt",string.Format("{0}\t{1}\r\n",System.Web.Hosting.HostingEnvironment.ShutdownReason.ToString(),DateTime.Now) );

}

另外在Action方法中添加了一個緩存,緩存是封裝過的,大概是以myappdomainTest作為鍵值去緩存值,如果沒有緩存就執行委托,並把結果緩存起來,作用待會兒看結果時見分曉

object now = CacheHelper.GetFromCache<object>("myappdomainTest", () =>

{

System.IO.File.AppendAllText(@"E:\Application_End.txt", string.Format("write cache myappdomainTest {0}\r\n",DateTime.Now));

return DateTime.Now;

});

在View中以彈窗的形式輸出AppDomain的信息以證明他有被取代過

<script>

$(function () {

alert('@AppDomain.CurrentDomain.GetHashCode();');

});

</script>

配置加上

<hostingEnvironment idleTimeout="5"/>

訪問了一下頁面,appdomian的HashCode如下

看到輸出的文件內容如下

靜待6分鐘,因為這裡是空閑5分鐘,所以假設當前是1033分,空閑5分鐘是需要到1139分。

再看看輸出的文件多了一行

說明AppDomain在10:39的時候被回收掉了,此時再訪問一下網頁

確實發現AppDomain不一樣了。而再看輸出的文件

緩存已經沒有了,需要重新生成。

假如把idleTimeout="5"去掉,則AppDomain一直都不會被回收,訪問過站點後,無論閑置多久都不會觸發Application_End

shutdownTimeout:設置正常關閉引用程式的時間量(以秒為單位)。這段話我也看不懂,在網上也找不到相關了資料,最開始是看了一下源碼,在HostingEnvironment中的私有方法InitiateShutdownWorkItemCallback(Object state /*not used*/)找到這麼一段,下麵的shutdonwTimeoutSeconds就是配置中設置的shutdownTimeout。

後來突發奇想才悟出這是特性的意思是關閉一個應用程式這個過程中,需要經歷shutdownTimeoutSeconds這麼多秒的一個時間過程。於是興奮地嘗試了一下,類似於上面的試驗idleTimeout那樣,調用了HostingEnvironment.InitiateShutdown()方法,結果得出的居然是

相差了兩秒,這兩秒,跟配置設置的值相差甚遠,後來再留意到進入休眠的另一個條件是_registeredObjects這個集合的元素需要大於0,難道是這個集合裡面沒有元素?這個registeredObjects是

而這個HostingEnvironment.InitiateShutdown()方法的作用是開始關閉與此宿主關聯的 Web 應用程式,並從系統中移除註冊對象。之所以需要設置shutdownTimeout是為了確保在關閉時有足夠是時間去註銷註冊到的IRegisteredObject對象。遺憾的是暫時無辦法去鑒別。

以上僅本人的推斷,如諸位有更好的看法或見解,請批評指正。下麵附帶了網上找來的關於idleTimeout 和ShutdownTimeout的支離片碎的內容。

   

   

在stackoverflow上面 《Difference between idleTimeout and ShutdownTimeout》

關於idleTimeout在WCF中的描述

After modifying a .svc file, the application domain is also recycled. The hosting environment will try to close all the WCF services' open connections gracefully in a timely manner. When services somehow don't close in time, they will be forced to abort. Through the HostingEnvironmentSettingsconfiguration settings, you can influence the behavior of recycling, as you can see in Listing 5-8. The idleTimeout setting determines the amount of idle time in seconds for an application domain to be recycled. The shutdowntimeout setting determines the amount of time in seconds to gracefully shut down an application. After this time-out, it forces applications to shut down.

Listing 5-8. Web.config with hostingenvironment section for recycling settings

<system.web>
<hostingEnvironment idleTimeout="20"
shutdownTimeout="30"/>
</system.web>

When you are using WCF sessions, these recycling features are critical to understand. This is typically the case in the security and reliable messaging scenarios, as you will read in Chapters 6 and 8 of this book. By default, WCF stores session state in memory. This is a different implementation from ASP.NET session state and doesn't come with a configuration to switch over to persistent session state storage. However, you can, and should, in the security and reliable messaging scenarios benefit from the ASP.NET implementation. Using the ASP.NET compatibility features of WCF provides you with the SQL Server and state server implementations of ASP.NET session state to support enterprise-ready scenarios. In the next section, you will learn how to benefit from the WCF ASP.NET compatibility mode.

   

來自 <https://msdn.microsoft.com/en-us/library/bb332338.aspx>

   

下麵的是譯文

修改 .svc 文件之後,還將回收應用程式域。承載環境將嘗試按時正常關閉所有 WCF 服務的打開連接。如果由於某種原因使服務無法按時關閉,系統將強制中止它們。通過 HostingEnvironmentSettings 配置設置,可以影響回收的行為,如列表 5-8 所示。idleTimeout 設置確定應用程式域在回收前的空閑時間長度(秒)。shutdowntimeout 設置確定正常關閉應用程式前的時間長度(秒)。發生此超時後,它將強制應用程式關閉。

使用 WCF 會話時,理解這些回收功能很重要。通常,在安全和可靠消息方案中有這種情況,本書的第 6 章和第 8 章將對此進行介紹。預設情況下,WCF 將會話狀態存儲在記憶體中。這是與 ASP.NET 會話狀態不同的實現,它沒有需要切換到持久會話狀態存儲的配置。但在安全和可靠消息方案中,您可以並且應當受益於 ASP.NET 實現。通過使用 WCF 的 ASP.NET 相容性功能,可以獲得 ASP.NET 會話狀態的 SQL Server 和狀態伺服器實現,以支持企業可用的方案。在下一節中,將介紹如何受益於 WCF ASP.NET 相容性模式。

   

在《Programming Microsoft ASP.NET 4》書中關於hostingEnvironment的一段描述。

   

另外在MSDN中看到的HostingEnvironment類,這個類與本配置節錶面的關聯不算多,看過源碼就發現裡面有些屬性還是用到了配置節的內容的,另外還發現了幾個有用的屬性。

例如之前有同學苦惱於獲取當前網站的路徑,其實也可以用Server屬性的MapPath也可。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 當我們來回切換頁面時候,視圖被緩存下來,不用每次再去new一個新的視圖,可以大大地提高性能。當跳出一個視圖後,視圖的元素被保存在DOM中,它的作用域也就不在$watch的作用域內,當我們訪問一個已經被緩存的視圖後,它的scope重新回到作用域內,同時留在DOM中的元素也被激活。 視圖生命周期: 視圖 ...
  • 多終端數據同步機制設計(二) Intro 如果您沒有看上一篇文章,建議您先移步到這裡查看第一部分 上一次主要解決了基本的數據增量同步的問題,但仍然存在一些問題。 可能存在的主要問題: 針對以上可能出現的這兩個問題,需要對數據進行校驗並且數據量超過一定量時進行分批量傳輸, 本文將著手解決 數據校驗 和 ...
  • 1.要安裝mvc3、mvc4、mvc5的插件 2.部署要創建應用程式池,並指定 3.許可權指定everyone ...
  • 遇到Unix時間戳轉換的問題,遂記錄下來。 Unix時間戳轉DateTime DateTime轉Unix時間戳 附:這是一個時間戳的轉換網址,上面也有不同語言的轉換。 http://unixtime.51240.com/ ...
  • 解決方法是新建 全局應用程式類 Global.asax 在 Session_Start 函數中 添加 string sessionId = Session.SessionID; ...
  • 王小明,他的長輩肯定有姓王的,彭河村村頭不就有家王姓人家嗎,可能就是那家的小孩,一個走丟的小孩就成功的回家了。 命名規範就如同給人起名一樣,從名字中傳達出一些信息,比如作用域、類型,能夠起到見名知義的作用,在開發的時候,有個良好的命名規範能夠提升不少的開發效率。特別是團隊開發的時候,每個人的命名規範 ...
  • 1、單行子查詢 select ename,deptno,sal from emp where deptno=(select deptno from dept where loc='NEW YORK'); 2、多行子查詢 SELECT ename,job,sal FROM EMP WHERE dept ...
  • 目錄 API 應用框架(Application Frameworks) 應用模板(Application Templates) 人工智慧(Artificial Intelligence) 程式集處理(Assembly Manipulation) 資源(Assets) 認證和授權(Authentica ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...