ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)

  • 1,792 views
Uploaded on

IIS for ASP.NET Developers, include concepts and features.

IIS for ASP.NET Developers, include concepts and features.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,792
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
24
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Git Deployment is Native, or through a Service hook from CodePlex, GitHub or BitBucket
  • Slide Objectives:Explain that Windows Azure Web Sites supports Classic ASP, ASP.NET, PHP, and Node.js out of the box and that you can also host any custom FastCGI handler.Notes:
  • Git Deployment is Native, or through a Service hook from CodePlex, GitHub or BitBucket

Transcript

  • 1. 4/3 高雄,4/7 台北
  • 2. ASP.NET 開發人員 不可不知的 IIS 小朱 MVP/MCSD/MCSE 台灣微軟資深講師
  • 3. Agenda • IIS 概觀 • 不可不知的 IIS 功能 • 驗證與授權 • 開發人員的小工具:IIS Express • Azure Website • IIS 的行程模型 (Process Model) • 模組,處理器與應用程式集區 • ASP.NET 常見與 IIS 有關的問題
  • 4. IIS 概觀
  • 5. IIS
  • 6. 什麼是 IIS? • 微軟平台的 Web 服務提供者 (Web service provider)。 • HTTP協定的伺服器。 • 執行 Classic ASP, ASP.NET應用程式。 • 執行支援 ISAPI-based 的網路應用程式 (FastCGI, PHP, node.js, …)。 • FTP • 由 Visual Studio 以及其他工具支援。 • Web Deploy • 雲端的支援 (Azure Websites)。
  • 7. IIS 的功能 • 執行 ASP.NET 等 Web 應用程式。 • 多個應用程式並行。 • 利用行程隔離 (process isolation) 的方式。 • 其中一個網站當掉,不會影響其他的網站。 • 舊版 IIS (6.0-) 和新版 IIS (7.0+) 的處理方式不同。 • 輔助的工具與功能 • 安全過濾 (security filtering) • 加速 (pre application startup) • 有部份需要透過Web Platform Installer來安裝。 • 還有更多…
  • 8. 不可不知的 IIS 功能
  • 9. Web Platform Installer • 在 IIS 上添加輔助功能。 • 直接內嵌於 IIS 內,便於使用。 • 內建數種 Configuration Package,可代為設定。
  • 10. 限制網站存取 • IP 位址與網域限制 • IIS 8 開始內建,IIS 7 或 7.5 有外掛可安裝。 • 可限制允許或拒絕特定網段 (IP 位址區間)。 • 可針對浮動 IP 進行限制。
  • 11. 要求過濾 (Request Filtering) • 對傳入 IIS 的 HTTP 要求做過濾,擋下不符合規 定的要求。 • 對副檔名做限制。 • 對 URL 做限制 (等同於 UrlScan 的功能)。 • 對要求內容做限制 (例如內容長度)。 • 對 HTTP 動詞做限制。 • 對 HTTP 標頭做限制。 • 對查詢字串做限制。 • ASP.NET 應用程式可做另一層限制。
  • 12. 輸出快取 (Output Cache) • 使用者模式快取 (User- mode cache) • 可設定空間較大。 • 針對特定標頭或查詢字 串進行快取。 • 可針對應用程式進行快 取監測。 • 核心模式快取 (Kernel- mode cache) • 針對檔案系統進行快取 監測。
  • 13. 記錄功能 • 一般記錄 • 支援 W3C, IIS, ODBC 等記錄,但通常只會安裝 W3C 和 IIS 的記錄功能,ODBC 則要到伺服器管理員或是 委由 Web PI 來設定。 • 預設只會安裝 W3C log。 • IIS 8.5 新功能 • 可選擇只輸出到記錄檔,ETW (Event Tracing for Windows) 事件記錄或是兩個都輸出。 • 即時記錄功能 (ETW-based)。 • 自訂記錄欄位。
  • 14. UserMode KernelMode Client Log files 1 4 W3WP HTTP.SYS 2 LOGSVC (new) 8 9 ETW (new) 5 10 67 3
  • 15. 記錄功能 • 自訂記錄欄位 (IIS 8.5) • 記錄一般以外的資訊。 • 要求標頭。 • 回應標頭。 • 伺服器變數。
  • 16. 記錄功能 • 進階記錄 (Advanced Logging) 模組 • 另一種記錄的方法。 • 外掛程式 (透過 Web PI)。 • 欄位為基本 W3C 記錄欄 位。 • 可支援記錄的過濾。 更多參考: http://www.microsoft.com/taiwan/technet/iis/expand/AdvancedLogging.aspx
  • 17. 記錄功能 • 失敗要求的追蹤記錄 (Failed Request Tracing) • 允許設定多組規則。 • 可針對要求的類型進行設定。 • 可依 HTTP 狀態碼,處理時間或事件等級進行記錄。 • IIS 7.0+ 均支援。
  • 18. 分析記錄檔 • Log Parser • 老牌可靠的記錄檔分析器。 • 支援20種記錄格式。 • 支援類 SQL 的查詢方式。 • 編寫排程定時分析,取出 使用者活動記錄或是錯誤 分析等。 • Log Parser 是命令列工具。 • Visual Log Parser • Lizard Log Parser GUI ($) 更多參考: http://www.microsoft.com/taiwan/technet/iis/expand/LogParser.aspx
  • 19. 應用程式初始化 • Application Initialization 模組 • 允許應用程式在 IIS 啟動時就開始載入。 • 適合首次需要進行大量資料處理或需要較長時間運算 的應用程式 (尤其是首頁)。 • IIS 7.5 為外掛,IIS 8+ 為內建。 • 設定應用程式的 preloadEnabled=true • 設定應用程式集區的 startMode=AlwaysRunning
  • 20. 代理行程暫止功能 • Idle Worker Process Page-Out • 當網站閒置超過設定時間時,IIS 8 之前的行為會將 代理行程終止。 • IIS 8.5 開始,允許網站管理員設定 IIS 不回收代理行 程,避免再次冷啟動 (cold-start),加快網站的回應 速度。 • 在應用程式進階設定中設定。
  • 21. 動態網站活化 • Dynamic Site Activation • IIS 在啟動時不先載入網站,等到有第一個針對該網 站的要求進入時,才啟動網站。 • 適合擁有大量網站,但每個網站都不用太多初始化時 間的情境。 • 修改 dynamicRegistrationThreshold 的值來增減網站 數量。
  • 22. 驗證與授權
  • 23. 驗證 • 驗證類型 • 匿名驗證 (Anonymous) • 基本驗證 (Basic) • 摘要式驗證 (Digest) • 表單驗證 (Forms) • ASP.NET 模擬 (ASP.NET Impersonate) • Windows 驗證 (Windows) • AD 用戶端憑證 (AD Certificate) • 一般而言,不需要安裝這麼多類型 (預設只有匿 名驗證與表單驗證,Windows 驗證會停用)。
  • 24. 使用者,角色與 URL 授權 • IIS 的授權功能由其內建模組提供 • 使用者功能 (ASP.NET Membership) • 角色功能 (ASP.NET Role) • 設定檔功能 (ASP.NET Profile) • URL 授權 • 支援針對使用者,角色的存取控制 (Windows 驗證時 則可依群組進行設定)。 • 可針對所有網站,特定網站或特定資料夾進行設定。
  • 25. IIS Express
  • 26. IIS Express • 縮小版的 IIS 7+。 • 支援以往在 ASP.NET Development Server 上沒 有的功能。 • Visual Studio 2012+ 直接支援。
  • 27. Azure Website (網站服務)
  • 28. Windows Azure Web Sites
  • 29. 支援的發行方法
  • 30. 支援的 Web 平台 …或任何的 FastCGI處理器
  • 31. 診斷與監控
  • 32. IIS 行程模型 (Process Model)
  • 33. IIS Process Model (6.0-) IIS 5.0-5.1 IIS 6.0
  • 34. IIS Process Model (7.0+) User 模式係 Web 應用程式的執行 空間。 Kernel 模式係作業 系統的執行空間。
  • 35. IIS Process Model (7.0+)
  • 36. 模組,處理常式與應用 程式集區
  • 37. 模組與處理常式 • 處理常式 (handler) 是針對特定資源所開發的的 處理器。 • ASP.NET Handler (System.Web.UI.PageHandlerFactory) • Extensionless Handler (System.Web.Handlers.TransferRequestHandler) • Simple HTTP Handler (System.Web.UI.SimpleHandlerFactory) • 分為 Managed 處理常式 (使用 .NET 開發的), 指令碼 (含萬用字元) 處理常式 (使用原生 API 開 發的) 以及模組內支援的處理常式。
  • 38. 模組與處理常式 • 模組 (module) 是所有 HTTP 要求都會通過的處 理器。 • ProtocolSupportModule (處理特定協定的模組) • RequestFilteringModule (要求過濾模組) • UrlAuthorizationModule (URL 授權模組) • UrlRoutingModule-4.0 (ASP.NET Routing) • 分為 Managed 模組與原生模組。 • ASP.NET 內的 HTTP Module 屬於 Managed Module。 • 原生模組必須用 C++ 開發,並使用 IIS 原生函式庫。
  • 39. 應用程式集區 (app pools) • 應用程式集區是指實際執行 ASP.NET 應用程式 (DLL) 的代理行程 (surrogate process)。 • 代理行程會依設定載入不同的 .NET Framework 執行期元件 (runtime components)。 • 2.0.50727, 4.0.30319 • 可安裝 .NET 1.1 於 IIS 7.0+。 • 原則上,應用程式層 (application) 和虛擬目錄 層 (virtual directories) 使用同一個代理行程,不 可以在應用程式層和虛擬目錄層執行不同 .NET 版本編譯出來的 ASP.NET 應用程式。
  • 40. 應用程式集區 (app pools) (cont’d) • 傳統模式 vs. 整合模式 • 傳統模式 (classic mode) 使用 ISAPI 的執行期元件 (aspnet_isapi.dll) 執行 ASP.NET,並由代理行程來 維護它的狀態,使用的是 <system.web> 內的設定。 • 整合模式 (integration model) 使用 .NET Framework 本身的 Web 組件 (System.Web.dll) 執 行 ASP.NET,並由代理行程來維護它的狀態,且使用 的是 <system.webServer> 內的設定。
  • 41. 應用程式集區 (app pools) (cont’d) • 什麼時候該使用傳統模式? • 應用程式是 ISAPI 原生模組 (native module) ,且執 行於 IIS 7 整合模式會有異常狀況時。 • 應用程式是 ASP.NET 2.0 之前的版本,且執行於 IIS 7 整合模式會有異常狀況時。 • 應用程式使用的是 classic ASP,且執行於 IIS 7 整合 模式會有異常狀況時。 • 大多數的應用程式使用整合模式就夠了。 參考資料: http://www.hanselman.com/blog/MovingOldApps FromIIS6ToIIS8AndWhyClassicModeExists.aspx
  • 42. 應用程式集區 (app pools) (cont’d) • IIS 7.0+ 的應用程式集區的安全性由代理行程處 理,結合 .NET CAS 機制控制。 • 預設情況下,IIS 使用 ApplicationPoolIdentity 這個帳戶給集區的代理行程。 • 預設帳戶的名稱為 IIS AppPool[集區名稱]。 • 這是個虛擬帳戶 (virtual account)。 • 它只具備了執行應用程式的權限,無法存取主機上的 任何資源。 • 若應用程式需要更高的權限,可設定為非 ApplicationPoolIdentity 的帳戶 (例如 Network Services),然後給予主機上的資源存取權限。
  • 43. 應用程式集區 (app pools) (cont’d) • ApplicationPoolIdentity: 只能執行應用程式,無法存 取主機或網路的資源。 • Network Services: 具備可執行網路服務的最小權限, 可以電腦的身份存取網路資源,但無法存取主機資源。 • Local Service: 具備可執行與存取 “服務” 以及服務控制 管理員 (SCM) 所需要的權限,但對網路資源只能發出匿 名要求。 • Local System: 具備內建帳戶中最大的權限,基本上是 LocalService+NetworkService的組合,但強烈不建議使 用此帳戶作為執行帳戶。
  • 44. ASP.NET 常見與 IIS 有 關的問題
  • 45. ASP.NET 常見的問題 #1 BadImageFormatException 為什麼我的程式執行在 64 位元的系統 會出現 BadImageFormatException 錯誤? Cause: 因為在64位元環境中,IIS是以64位元 的行程執行方式執行,對於以 Any CPU 編譯的 ASP.NET 應用程式來說亳 無問題。 但若應用程式中引用到,或是以 x86 模式編譯的話,就會發生這個錯誤。
  • 46. ASP.NET 常見的問題 #1 BadImageFormatException 解決方案: 在應用程式集區的帳戶 設定中,設定啟用執行 32位元應用程式為true。 這個動作會讓代理行程執 行於 64 位元的 WoW 模式, 所以可存取 32 位元的應用 程式資訊。
  • 47. ASP.NET 常見的問題 #2 UnauthorizedAccessException 為什麼我的程式執行在存取檔案時出現 System.UnauthorizedAccessException? Cause: 代理行程所使用的帳 戶沒有足夠的權限來 存取資源,經常發生 在檔案上傳與讀寫上。
  • 48. ASP.NET 常見的問題 #2 UnauthorizedAccessException 解決方案: 1. 若原本使用的是 ApplicationPoolIdentity, 請更換為 Network Service 或 Local Service (不可使用 Local System)。 2. 在要存取的檔案資源的資 料夾中設定該帳戶具有讀 取、修改和(或)寫入的權限。
  • 49. ASP.NET 常見的問題 #3 無法存取外部COM元件 為什麼我的程式執行在呼叫 Microsoft Excel 物件時出現 System.UnauthorizedAccessException? Cause: 代理行程所使用的帳 戶沒有足夠的權限來 存取 COM 元件。
  • 50. ASP.NET 常見的問題 #3 無法存取外部COM元件 解決方案: 1. 使用具權限的帳戶,並啟用 ASP.NET 模擬 (impersonate) 功能。 2. 修改 DCOM 的組態設定,對 Excel COM 元件啟用互動式使用者登入功能,以取得 ASP.NET 代理程式的執行帳戶的權限。 注意:若使用第二項,則不可在代理程式上設定使 用權限過高的帳戶 (ex: Administrator),否則會產 生極高的安全風險。
  • 51. ASP.NET 常見的問題 #4 處理器莫名奇妙的消失了 我在程式中的 Web.config 註冊了我自己的 HTTP 處理器, 但放到 IIS 7.5 時出現了這個錯誤: Cause: 1. 若是發生在 ASP.NET 本身,則表示 IIS 沒有註冊好。 2. 若是自訂的 HTTP 處理器,則可能是放錯位置。
  • 52. ASP.NET 常見的問題 #4 處理器莫名奇妙的消失了 解決方案: 1. ASP.NET在IIS上未註冊,請到.NET Framework 的安裝目錄,執行 aspnet_regiis.exe -i 即可。 2. 在 IIS 7.0+ 的版本,Web.config 中針對 IIS 的設定必須放在 <system.webServer> 內, 因此只要改一下位置即可。
  • 53. ASP.NET 常見的問題 #5 奇妙的404 我的網站中有用到 Flash 的動畫檔 (.swf),但放到 IIS 上後沒 有反應,直接瀏覽會看到 404 的錯誤。 Cause: 某些特殊的檔案並沒有在 IIS 上註冊 MIME 型別資訊,當 IIS 無法確定檔案的 MIME 型別時會直接回覆 404。
  • 54. ASP.NET 常見的問題 #5 奇妙的404 解決方案: 在 IIS 管理員內的 MIME 類型加入要下載的檔案 的 MIME 型別記錄即可。
  • 55. Recap • IIS 概觀 • 不可不知的 IIS 功能 • 驗證與授權 • 開發人員的小工具:IIS Express • Azure Website • IIS 的行程模型 (Process Model) • 模組,處理器與應用程式集區 • ASP.NET 常見與 IIS 有關的問題
  • 56. 參考資料 • IIS.net: http://www.iis.net • TechNet IIS: http://www.microsoft.com/taiwan/technet/iis/ • Microsoft Azure: http://www.azure.com
  • 57. Q&A