2010-06-23 21 views
2

我在設置應用程序web.config中的ExecutionTimeout元素時遇到了一些麻煩。當在ASP.net中使用<Compilation>

我的頁面正在進行漫長的web服務調用,並在110秒後超時。 (我相信的默認值)。我將該值設置爲220,並確保編譯debug = false。

請問編輯設定是指當IIS/ASP.net當客戶端請求他們呢,還是指到Visual Studio編譯存在過程中創建的組件編譯ASPX頁面。

使用在Visual Studio中使用調試構建的程序集仍然允許上述設置工作?

回答

2

當人們請求它們時,IIS不會編譯aspx頁面。如果您在VS中有一個「Web應用程序項目」,那麼您在部署之前編譯所有代碼和其他類文件。如果您在VS中有「網站項目」,那麼Web服務器僅在第一次請求時編譯您的應用程序。發生這些情況後,應用程序不會再次編譯,直到您做出更改。

考慮到上面的信息,這是編譯debug = true |錯誤發揮作用。 debug = true後,你會得到一些非常詳細的錯誤和其他事件的信息,但它可以讓你的應用程序運行速度較慢,因爲調試符號被插入到.dll和整體,它沒有優化性能。通過設置debug = false,您不會得到完全相同級別的錯誤報告,但是您確實會收回性能提升。

如果您在VS中構建,它將根據web.config中的設置進行構建,除非它是您包含的外部.dll/class項目。如果是這種情況,web.config設置對該.dll沒有任何意義,並且無論您在這兩個項目中使用debug = false | true的組合如何,都將運行。

+0

AFAIK代碼隱藏被編譯成用於Web應用程序的DLL。但仍然頁面,控件和主人被編譯爲從原始頁面派生的類。 – terR0Q 2010-06-23 13:28:53

0

IIS在第一次請求時編譯ASPX頁面(和ASCX UserControls,ASHX,ASMX,...)。它還動態編譯:

  • 代碼在App_Code文件夾

  • 代碼在代碼旁邊的一個網站項目

頁web.config中的編譯元素是指這個編譯。

如果您在Visual Studio中使用Web應用程序項目,您的ASPX頁面將有一個代碼隱藏文件。當項目在Visual Studio中構建時,這將編譯到DLL中,並且不會受到web.config編譯元素的影響。

1

編譯標記用於添加引用的庫以供IIS或Visual Studio編譯,並指定調試和批處理編譯模式。

說到debug屬性,這裏的good article在米蘭Negovan博客的所有細節。

而關於編譯本身。

有3種編譯模式。它們在MSDN Overview中有完整的描述。

默認情況下,Web應用程序使用可更新預編譯:所有.cs文件被編譯爲一個程序集,但所有頁面,控件和母版頁都按需編譯爲新的派生類。

網站項目默認使用就地編譯。

必須明確指定不可更新的完整預編譯。在這裏,當compilation標籤進來。如果batch="true"那麼應用程序中的所有頁面將在第一次請求到任何頁面時被編譯。這讓我們想到另一個關於大型應用程序的故事:)

請注意,在編譯模型中還有一些其他細節,如果真的需要,請查看ASP.NET Precompilation Overview