如何使用托管代码 (C#) 创建简单的 FTP 主目录提供程序
Microsoft 创建了一个新的 FTP 服务,该服务针对 Windows Server® 2008 完全重新编写。 这种新的 FTP 服务包含许多新功能,使 Web 作者能够比以前更轻松地发布内容,并为 Web 管理员提供了更多的安全性和部署选项。
新的 FTP 7.5 服务支持扩展性,让你扩展 FTP 服务随附的内置功能。 更具体地说,FTP 7.5 支持创建你自己的身份验证和授权提供程序。 你还可以创建用于自定义 FTP 日志记录和确定 FTP 用户的主目录信息的提供程序。
本演练将引导你完成使用托管代码创建简单的 FTP 主目录提供程序的步骤。
先决条件
必须准备好以下各项才能完成本文中的过程:
IIS 7.0 或更高版本必须安装在 Windows Server 2008 服务器上,并且必须安装 Internet Information Services (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 程序集。
- 右键单击该程序集,然后单击“属性”。
- 复制“区域性”值,例如“Neutral”。
- 复制“版本”号,例如“1.0.0.0”。
- 复制“公钥令牌”值,例如“426f62526f636b73”。
- 单击“取消” 。
- 在 Windows 资源管理器中打开
将扩展性提供程序添加到 FTP 提供程序的全局列表中:
打开“Internet Information Services (IIS)管理器”。
在“连接”窗格中单击计算机名称。
双击主窗口中的“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 服务会将每个用户的主目录设置为已在演示提供程序中指定的路径。