如何使用 Managed 程式代碼 (C#) 建立簡單的 FTP 主目錄提供者
由 羅伯特·麥克默里
Microsoft 已建立已完全重寫 Windows Server® 2008 的新 FTP 服務。 這個新的 FTP 服務包含許多新功能,可讓 Web 作者比以往更輕鬆地發佈內容,並提供 Web 系統管理員更多的安全性和部署選項。
新的 FTP 7.5 服務支援擴充性,可讓您擴充 FTP 服務隨附的內建功能。 更具體來說,FTP 7.5 支援建立您自己的驗證和授權提供者。 您也可以建立自定義 FTP 記錄的提供者,以及判斷 FTP 使用者的主目錄資訊。
本逐步解說將引導您完成使用 Managed 程式代碼建立簡單 FTP 主目錄提供者的步驟。
必要條件
需要下列專案才能完成本文中的程式:
IIS 7.0 或更新版本必須安裝在 Windows Server 2008 伺服器上,而且也必須安裝 網際網路資訊服務 (IIS) 管理員。
必須安裝新的 FTP 7.5 服務。
您必須建立 FTP 發行的根資料夾。
您必須使用 Visual Studio 2008。
注意
如果您使用舊版 Visual Studio,本逐步解說中的某些步驟可能不正確。
必須建立每個使用者的主目錄;程式代碼範例會使用
C:\Ftpusers\%*UserName*%
,但您可以視需要變更。
步驟 1:設定項目環境
在此步驟中,您將為示範提供者在Visual Studio 2008中建立專案。
開啟 Microsoft Visual Studio 2008。
單擊 [ 檔案] 功能表,然後按下 [新增],然後按下 [ 專案]。
在 [新增專案] 對話方塊中:
- 選擇 [Visual C# ] 作為項目類型。
- 選擇 [類別庫 ] 作為範本。
- 輸入 FtpHomeDirectoryDemo 做為項目的名稱。
- 按一下 [確定]。
當項目開啟時,將參考路徑新增至 FTP 擴充性連結庫:
按兩下 [專案],然後按兩下 [ FtpHomeDirectoryDemo 屬性]。
按兩下 [ 參考路徑] 索引標籤 。
輸入 Windows 版本的 FTP 擴充性元件路徑,其中 C: 是作業系統磁碟驅動器:
- 針對 Windows Server 2008 和 Windows Vista:
C:\Windows\assembly\GAC\_MSIL\Microsoft.Web.FtpServer\7.5.0.0\_\_31bf3856ad364e35
- 針對 Windows 7:
C:\Program Files\Reference Assemblies\Microsoft\IIS
- 針對 Windows Server 2008 和 Windows Vista:
按兩下 [ 新增資料夾]。
將強名稱索引鍵新增至專案:
- 按兩下 [專案],然後按兩下 [ FtpHomeDirectoryDemo 屬性]。
- 按一下 [ 簽署 ] 索引標籤。
- 核取 [ 簽署元件 ] 複選框。
- <從強式金鑰名稱下拉式方塊中選擇 [新增>]。
- 輸入 FtpHomeDirectoryDemoKey 以取得金鑰檔名。
- 如有需要,請輸入金鑰檔案的密碼;否則,請清除 [ 使用密碼 保護我的金鑰檔案] 複選框。
- 按一下 [確定]。
選擇性:您可以新增自訂建置事件,將 DLL 自動新增至開發電腦上的全域程式集快取 (GAC):
按兩下 [專案],然後按兩下 [ FtpHomeDirectoryDemo 屬性]。
按兩下 [ 建置事件] 索引 標籤。
在 [建置後事件命令行 ] 對話框中輸入下列內容:
net stop ftpsvc call "%VS90COMNTOOLS%\vsvars32.bat">null gacutil.exe /if "$(TargetPath)" net start ftpsvc
儲存專案。
步驟 2:建立擴充性類別
在此步驟中,您將實作示範提供者的擴充性介面。
為專案新增 FTP 擴充性連結庫的參考:
- 按兩下 [專案],然後按兩下 [ 新增參考]
- 在 [.NET] 索引卷標上,按兩下 [Microsoft.Web.FtpServer]。
- 按一下 [確定]。
為專案新增 System.Web 的參考:
- 按兩下 [專案],然後按兩下 [ 新增參考]
- 在 [.NET] 索引卷標上,按兩下 [System.Web]。
- 按一下 [確定]。
新增驗證類別的程式代碼:
在 方案總管 中,按兩下Class1.cs檔案。
拿掉現有的程序代碼。
將下列程式碼貼到編輯器中:
using System; using Microsoft.Web.FtpServer; namespace FtpHomeDirectory { public class FtpHomeDirDemo : BaseProvider, IFtpHomeDirectoryProvider { string IFtpHomeDirectoryProvider.GetUserHomeDirectoryData( string sessionId, string siteName, string userName) { // Note: You would add your own custom logic here. // Return the user's home directory based on their user name. return @"C:\Ftpusers\" + userName; } } }
儲存並編譯專案。
注意
如果您未使用選擇性步驟在 GAC 中註冊元件,您必須手動將元件複製到 IIS 計算機,並使用 Gacutil.exe 工具將元件新增至 GAC。 如需詳細資訊,請參閱 Gacutil.exe(全域程式集緩存工具) 一文。
步驟 3:將主目錄提供者新增至 FTP
在此步驟中,您會將示範提供者新增至 FTP 服務和默認網站。
判斷擴充性提供者的元件資訊:
- 在 Windows 檔案總管中,開啟您的
C:\Windows\assembly
路徑,其中 C: 是作業系統磁碟驅動器。 - 找出 FtpHomeDirectoryDemo 元件。
- 以滑鼠右鍵按兩下元件,然後按下 [ 屬性]。
- 複製文化特性值;例如:中性。
- 複製版本號碼;例如:1.0.0.0。
- 複製公鑰令牌值;例如:426f626f62526f636b73。
- 按一下 [取消] 。
- 在 Windows 檔案總管中,開啟您的
將擴充性提供者新增至 FTP 提供者的全域清單:
開啟 網際網路資訊服務 (IIS) 管理員。
按兩下 [連線 ions] 窗格中的電腦名稱。
按兩下 主視窗中的 [FTP 驗證 ]。
按兩下 [動作] 窗格中的 [自定義提供者]。
按一下 [註冊] 。
針對提供者名稱輸入 FtpHomeDirectoryDemo。
按兩下 [受控提供者 [.NET]。
使用您稍早複製的信息,輸入擴充性提供者的元件資訊。 例如:
FtpHomeDirectory.FtpHomeDirDemo,FtpHomeDirectoryDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
按一下 [確定]。
清除 提供者清單中的 FtpHomeDirectoryDemo 複選框。
按一下 [確定]。
將自訂提供者新增至網站:
目前沒有任何 UI 可讓您將自訂功能新增至網站,因此您必須使用下列命令行:
AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpHomeDirectoryDemo',enabled='true']
設定使用者隔離以使用自訂提供者:
目前沒有任何 UI 可讓您指定使用者隔離的自訂功能,因此您必須使用下列命令列:
AppCmd set site "Default Web Site" /ftpServer.userIsolation.mode:Custom
摘要
在本逐步解說中,您已瞭解如何:
- 在 Visual Studio 2008 中為自定義 FTP 主目錄提供者建立專案。
- 實作自定義 FTP 主目錄查閱的擴充性介面。
- 將自定義主目錄提供者新增至 FTP 服務。
當使用者連線到 FTP 網站時,FTP 服務會將每個使用者的主目錄設定為您在示範提供者中指定的路徑。