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

Weitere ähnliche Inhalte

Was ist angesagt?

リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法Tetsutaro Watanabe
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Koichi Sakata
 
最近のやられアプリを試してみた
最近のやられアプリを試してみた最近のやられアプリを試してみた
最近のやられアプリを試してみたzaki4649
 
決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話Ryosuke Uchitate
 
OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)Ian Choi
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンKentaro Yoshida
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javaYuji Kubota
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つapkiban
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Norito Agetsuma
 
OpenStackトラブルシューティング入門
OpenStackトラブルシューティング入門OpenStackトラブルシューティング入門
OpenStackトラブルシューティング入門VirtualTech Japan Inc.
 
エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩Takuya Tezuka
 
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~  - ...「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~  - ...
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...VirtualTech Japan Inc.
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンAkihiko Horiuchi
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き土岐 孝平
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門Masaya Dake
 

Was ist angesagt? (20)

リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)Guide to GraalVM (JJUG CCC 2019 Fall)
Guide to GraalVM (JJUG CCC 2019 Fall)
 
最近のやられアプリを試してみた
最近のやられアプリを試してみた最近のやられアプリを試してみた
最近のやられアプリを試してみた
 
決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話
 
OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
java.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷javajava.lang.OutOfMemoryError #渋谷java
java.lang.OutOfMemoryError #渋谷java
 
バッチは地味だが役に立つ
バッチは地味だが役に立つバッチは地味だが役に立つ
バッチは地味だが役に立つ
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
 
OpenStackトラブルシューティング入門
OpenStackトラブルシューティング入門OpenStackトラブルシューティング入門
OpenStackトラブルシューティング入門
 
エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩エンジニア必見!Sreへの第一歩
エンジニア必見!Sreへの第一歩
 
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~  - ...「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~  - ...
「Neutronになって理解するOpenStack Network」~Neutron/Open vSwitchなどNeutronと周辺技術の解説~ - ...
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホンGoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
 
ネットワーク構築訓練 入門
ネットワーク構築訓練 入門ネットワーク構築訓練 入門
ネットワーク構築訓練 入門
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
グラフデータベース入門
グラフデータベース入門グラフデータベース入門
グラフデータベース入門
 

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

使用 ASP.NET 5 實戰開發雲端應用程式
使用 ASP.NET 5 實戰開發雲端應用程式使用 ASP.NET 5 實戰開發雲端應用程式
使用 ASP.NET 5 實戰開發雲端應用程式Will Huang
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
 
Appserv setup
Appserv setupAppserv setup
Appserv setupHt Wang
 
微軟實戰課程日:玩轉雲端 技術與架構
微軟實戰課程日:玩轉雲端 技術與架構微軟實戰課程日:玩轉雲端 技術與架構
微軟實戰課程日:玩轉雲端 技術與架構Jeff Chu
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索Will Huang
 
PHP.on.Windows.Overview.CHS
PHP.on.Windows.Overview.CHSPHP.on.Windows.Overview.CHS
PHP.on.Windows.Overview.CHScqwang
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定ServletCh02 撰寫與設定Servlet
Ch02 撰寫與設定ServletJustin Lin
 
.NET Security Application/Web Development - Part III
.NET Security Application/Web Development - Part III.NET Security Application/Web Development - Part III
.NET Security Application/Web Development - Part IIIChen-Tien Tsai
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
1107 Windows server 2008 - IIS 7.0 架構與建置
1107 Windows server 2008 - IIS 7.0 架構與建置1107 Windows server 2008 - IIS 7.0 架構與建置
1107 Windows server 2008 - IIS 7.0 架構與建置Timothy Chen
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Gelis Wu
 
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)Jeff Chu
 
6. 非同步設計
6. 非同步設計6. 非同步設計
6. 非同步設計Justin Lin
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4Daniel Chou
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomihdksky
 
Global Azure Bootcamp 2015 at Study4
Global Azure Bootcamp 2015 at Study4Global Azure Bootcamp 2015 at Study4
Global Azure Bootcamp 2015 at Study4Kyle Shen
 

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

使用 ASP.NET 5 實戰開發雲端應用程式
使用 ASP.NET 5 實戰開發雲端應用程式使用 ASP.NET 5 實戰開發雲端應用程式
使用 ASP.NET 5 實戰開發雲端應用程式
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
Appserv setup
Appserv setupAppserv setup
Appserv setup
 
微軟實戰課程日:玩轉雲端 技術與架構
微軟實戰課程日:玩轉雲端 技術與架構微軟實戰課程日:玩轉雲端 技術與架構
微軟實戰課程日:玩轉雲端 技術與架構
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
 
PHP.on.Windows.Overview.CHS
PHP.on.Windows.Overview.CHSPHP.on.Windows.Overview.CHS
PHP.on.Windows.Overview.CHS
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定ServletCh02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
 
.NET Security Application/Web Development - Part III
.NET Security Application/Web Development - Part III.NET Security Application/Web Development - Part III
.NET Security Application/Web Development - Part III
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
1107 Windows server 2008 - IIS 7.0 架構與建置
1107 Windows server 2008 - IIS 7.0 架構與建置1107 Windows server 2008 - IIS 7.0 架構與建置
1107 Windows server 2008 - IIS 7.0 架構與建置
 
第1章
第1章第1章
第1章
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
 
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
 
6. 非同步設計
6. 非同步設計6. 非同步設計
6. 非同步設計
 
How to ASP.NET MVC4
How to ASP.NET MVC4How to ASP.NET MVC4
How to ASP.NET MVC4
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
D baa s_in_xiaomi
D baa s_in_xiaomiD baa s_in_xiaomi
D baa s_in_xiaomi
 
Global Azure Bootcamp 2015 at Study4
Global Azure Bootcamp 2015 at Study4Global Azure Bootcamp 2015 at Study4
Global Azure Bootcamp 2015 at Study4
 

Mehr von Jeff Chu

.NET Conf 2019 高雄場 - .NET Core 3.0
.NET Conf 2019 高雄場 - .NET Core 3.0.NET Conf 2019 高雄場 - .NET Core 3.0
.NET Conf 2019 高雄場 - .NET Core 3.0Jeff Chu
 
Developing Serverless application with Microsoft Azure and Cognitive Services
Developing Serverless application with Microsoft Azure and Cognitive ServicesDeveloping Serverless application with Microsoft Azure and Cognitive Services
Developing Serverless application with Microsoft Azure and Cognitive ServicesJeff Chu
 
.NET Innovations and Improvements
.NET Innovations and Improvements.NET Innovations and Improvements
.NET Innovations and ImprovementsJeff Chu
 
Microsoft Azure IoT 手把手實作 @ K.NET by Maduka (2017-8-12)
Microsoft Azure IoT 手把手實作 @ K.NET by Maduka (2017-8-12)Microsoft Azure IoT 手把手實作 @ K.NET by Maduka (2017-8-12)
Microsoft Azure IoT 手把手實作 @ K.NET by Maduka (2017-8-12)Jeff Chu
 
Innovations of .NET and Azure (Recaps of Build 2017 selected sessions)
Innovations of .NET and Azure (Recaps of Build 2017 selected sessions)Innovations of .NET and Azure (Recaps of Build 2017 selected sessions)
Innovations of .NET and Azure (Recaps of Build 2017 selected sessions)Jeff Chu
 
利用微軟雲端平台打造完整 IoT 服務鍊 (maduka)
利用微軟雲端平台打造完整 IoT 服務鍊 (maduka)利用微軟雲端平台打造完整 IoT 服務鍊 (maduka)
利用微軟雲端平台打造完整 IoT 服務鍊 (maduka)Jeff Chu
 
Developing serverless applications with azure functions
Developing serverless applications with azure functionsDeveloping serverless applications with azure functions
Developing serverless applications with azure functionsJeff Chu
 
Connect() Mini 2016
Connect() Mini 2016Connect() Mini 2016
Connect() Mini 2016Jeff Chu
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Jeff Chu
 
Windows 與 Azure 的容器旅程 @ Skilltree Day
Windows 與 Azure 的容器旅程 @ Skilltree DayWindows 與 Azure 的容器旅程 @ Skilltree Day
Windows 與 Azure 的容器旅程 @ Skilltree DayJeff Chu
 
領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)Jeff Chu
 
物件導向設計原則:SOLID + DI
物件導向設計原則:SOLID + DI物件導向設計原則:SOLID + DI
物件導向設計原則:SOLID + DIJeff Chu
 
例外處理實務
例外處理實務例外處理實務
例外處理實務Jeff Chu
 
Machine Learning, Big Data, Insights
Machine Learning, Big Data, InsightsMachine Learning, Big Data, Insights
Machine Learning, Big Data, InsightsJeff Chu
 
Global Azure Bootcamp 2015 Taipei: Planning and Migrating your Application fr...
Global Azure Bootcamp 2015 Taipei: Planning and Migrating your Application fr...Global Azure Bootcamp 2015 Taipei: Planning and Migrating your Application fr...
Global Azure Bootcamp 2015 Taipei: Planning and Migrating your Application fr...Jeff Chu
 
Cloud computing for manufacturing
Cloud computing for manufacturingCloud computing for manufacturing
Cloud computing for manufacturingJeff Chu
 
Microsoft Azure 新功能導覽 @ Build 2014
Microsoft Azure 新功能導覽 @ Build 2014Microsoft Azure 新功能導覽 @ Build 2014
Microsoft Azure 新功能導覽 @ Build 2014Jeff Chu
 
Microsoft Azure 概觀 (2014-4-2 雲端達人班)
Microsoft Azure 概觀 (2014-4-2 雲端達人班)Microsoft Azure 概觀 (2014-4-2 雲端達人班)
Microsoft Azure 概觀 (2014-4-2 雲端達人班)Jeff Chu
 
Microsoft Azure 虛擬機器與虛擬網路 (2014-4-2 雲端達人班)
Microsoft Azure 虛擬機器與虛擬網路 (2014-4-2 雲端達人班)Microsoft Azure 虛擬機器與虛擬網路 (2014-4-2 雲端達人班)
Microsoft Azure 虛擬機器與虛擬網路 (2014-4-2 雲端達人班)Jeff Chu
 
GWAB 2014 Taipei: 由本地移轉至雲端 - 構思與實踐
GWAB 2014 Taipei: 由本地移轉至雲端 - 構思與實踐GWAB 2014 Taipei: 由本地移轉至雲端 - 構思與實踐
GWAB 2014 Taipei: 由本地移轉至雲端 - 構思與實踐Jeff Chu
 

Mehr von Jeff Chu (20)

.NET Conf 2019 高雄場 - .NET Core 3.0
.NET Conf 2019 高雄場 - .NET Core 3.0.NET Conf 2019 高雄場 - .NET Core 3.0
.NET Conf 2019 高雄場 - .NET Core 3.0
 
Developing Serverless application with Microsoft Azure and Cognitive Services
Developing Serverless application with Microsoft Azure and Cognitive ServicesDeveloping Serverless application with Microsoft Azure and Cognitive Services
Developing Serverless application with Microsoft Azure and Cognitive Services
 
.NET Innovations and Improvements
.NET Innovations and Improvements.NET Innovations and Improvements
.NET Innovations and Improvements
 
Microsoft Azure IoT 手把手實作 @ K.NET by Maduka (2017-8-12)
Microsoft Azure IoT 手把手實作 @ K.NET by Maduka (2017-8-12)Microsoft Azure IoT 手把手實作 @ K.NET by Maduka (2017-8-12)
Microsoft Azure IoT 手把手實作 @ K.NET by Maduka (2017-8-12)
 
Innovations of .NET and Azure (Recaps of Build 2017 selected sessions)
Innovations of .NET and Azure (Recaps of Build 2017 selected sessions)Innovations of .NET and Azure (Recaps of Build 2017 selected sessions)
Innovations of .NET and Azure (Recaps of Build 2017 selected sessions)
 
利用微軟雲端平台打造完整 IoT 服務鍊 (maduka)
利用微軟雲端平台打造完整 IoT 服務鍊 (maduka)利用微軟雲端平台打造完整 IoT 服務鍊 (maduka)
利用微軟雲端平台打造完整 IoT 服務鍊 (maduka)
 
Developing serverless applications with azure functions
Developing serverless applications with azure functionsDeveloping serverless applications with azure functions
Developing serverless applications with azure functions
 
Connect() Mini 2016
Connect() Mini 2016Connect() Mini 2016
Connect() Mini 2016
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
 
Windows 與 Azure 的容器旅程 @ Skilltree Day
Windows 與 Azure 的容器旅程 @ Skilltree DayWindows 與 Azure 的容器旅程 @ Skilltree Day
Windows 與 Azure 的容器旅程 @ Skilltree Day
 
領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)
 
物件導向設計原則:SOLID + DI
物件導向設計原則:SOLID + DI物件導向設計原則:SOLID + DI
物件導向設計原則:SOLID + DI
 
例外處理實務
例外處理實務例外處理實務
例外處理實務
 
Machine Learning, Big Data, Insights
Machine Learning, Big Data, InsightsMachine Learning, Big Data, Insights
Machine Learning, Big Data, Insights
 
Global Azure Bootcamp 2015 Taipei: Planning and Migrating your Application fr...
Global Azure Bootcamp 2015 Taipei: Planning and Migrating your Application fr...Global Azure Bootcamp 2015 Taipei: Planning and Migrating your Application fr...
Global Azure Bootcamp 2015 Taipei: Planning and Migrating your Application fr...
 
Cloud computing for manufacturing
Cloud computing for manufacturingCloud computing for manufacturing
Cloud computing for manufacturing
 
Microsoft Azure 新功能導覽 @ Build 2014
Microsoft Azure 新功能導覽 @ Build 2014Microsoft Azure 新功能導覽 @ Build 2014
Microsoft Azure 新功能導覽 @ Build 2014
 
Microsoft Azure 概觀 (2014-4-2 雲端達人班)
Microsoft Azure 概觀 (2014-4-2 雲端達人班)Microsoft Azure 概觀 (2014-4-2 雲端達人班)
Microsoft Azure 概觀 (2014-4-2 雲端達人班)
 
Microsoft Azure 虛擬機器與虛擬網路 (2014-4-2 雲端達人班)
Microsoft Azure 虛擬機器與虛擬網路 (2014-4-2 雲端達人班)Microsoft Azure 虛擬機器與虛擬網路 (2014-4-2 雲端達人班)
Microsoft Azure 虛擬機器與虛擬網路 (2014-4-2 雲端達人班)
 
GWAB 2014 Taipei: 由本地移轉至雲端 - 構思與實踐
GWAB 2014 Taipei: 由本地移轉至雲端 - 構思與實踐GWAB 2014 Taipei: 由本地移轉至雲端 - 構思與實踐
GWAB 2014 Taipei: 由本地移轉至雲端 - 構思與實踐
 

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

  • 3. Agenda • IIS 概觀 • 不可不知的 IIS 功能 • 驗證與授權 • 開發人員的小工具:IIS Express • Azure Website • IIS 的行程模型 (Process Model) • 模組,處理器與應用程式集區 • ASP.NET 常見與 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來安裝。 • 還有更多…
  • 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)。 • 自訂記錄欄位。
  • 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 的值來增減網站 數量。
  • 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 驗證時 則可依群組進行設定)。 • 可針對所有網站,特定網站或特定資料夾進行設定。
  • 26. IIS Express • 縮小版的 IIS 7+。 • 支援以往在 ASP.NET Development Server 上沒 有的功能。 • Visual Studio 2012+ 直接支援。
  • 33. IIS Process Model (6.0-) IIS 5.0-5.1 IIS 6.0
  • 34. IIS Process Model (7.0+) User 模式係 Web 應用程式的執行 空間。 Kernel 模式係作業 系統的執行空間。
  • 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 模式編譯的話,就會發生這個錯誤。
  • 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

Hinweis der Redaktion

  1. Git Deployment is Native, or through a Service hook from CodePlex, GitHub or BitBucket
  2. 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:
  3. Git Deployment is Native, or through a Service hook from CodePlex, GitHub or BitBucket