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:\logfiles\myftpsite
,但你可以根据需要进行更改。
步骤 1:设置项目环境
在此步骤中,你将在 Visual Studio 2008 中为演示提供程序创建一个项目。
打开 Microsoft Visual Studio 2008。
依次单击“文件”菜单、“新建”、“项目”。
在“新建项目”对话框中执行以下操作:
- 选择“Visual C#”作为项目类型。
- 选择“类库”作为模板。
- 键入“FtpLoggingDemo”作为项目的名称。
- 单击“确定”。
项目打开后,添加 FTP 扩展性库的引用路径:
单击“项目”,然后单击“FtpLoggingDemo 属性”。
单击“引用路径”选项卡。
输入 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:
单击“添加文件夹”。
为项目添加一个强名称密钥:
- 单击“项目”,然后单击“FtpLoggingDemo 属性”。
- 单击“签名”选项卡。
- 勾选“为程序集签名”复选框。
- 从强密钥名称下拉框中选择“<新建...>”。
- 输入“FtpLoggingDemoKey”作为密钥文件名。
- 根据需要输入密钥文件的密码;否则,请清除“使用密码保护我的密钥文件”复选框。
- 单击“确定”。
可选:可以添加自定义生成事件,以将 DLL 自动添加到开发计算机上的全局程序集缓存 (GAC):
单击“项目”,然后单击“FtpLoggingDemo 属性”。
单击“生成事件”选项卡。
在“生成后事件命令行”对话框中输入以下内容:
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 System.IO; using Microsoft.Web.FtpServer; namespace FtpLogging { public class FtpLogDemo : BaseProvider, IFtpLogProvider { void IFtpLogProvider.Log(FtpLogEntry loggingParameters) { // Note: You would add your own custom logic here. // Open the log file for output. using (StreamWriter sw = new StreamWriter(@"C:\logfiles\myftpsite\myftplog.log",true)) { // Retrieve the current date and time for the log entry. DateTime dt = DateTime.Now; // Retrieve the user name. string un = loggingParameters.UserName; // Write the log entry to the log file. sw.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\t{5}", dt.ToShortDateString(), dt.ToLongTimeString(), loggingParameters.RemoteIPAddress, (un.Length == 0) ? "-" : un, loggingParameters.Command, loggingParameters.SessionId); } } } }
保存并编译项目。
注意
如果你没有使用可选步骤在 GAC 中注册程序集,则需要手动将程序集复制到 IIS 计算机,并使用 Gacutil.exe 工具将程序集添加到 GAC。 有关详细信息,请参阅 Gacutil.exe(全局程序集缓存工具)。
步骤 3:将日志记录提供程序添加到 FTP
在此步骤中,你将向 FTP 服务和默认网站添加演示提供程序。
确定扩展性提供程序的程序集信息:
- 在 Windows 资源管理器中打开
C:\Windows\assembly
路径,其中 C: 是操作系统驱动器。 - 找到 FtpLoggingDemo 程序集。
- 右键单击该程序集,然后单击“属性”。
- 复制“区域性”值,例如“Neutral”。
- 复制“版本”号,例如“1.0.0.0”。
- 复制“公钥令牌”值,例如“426f62526f636b73”。
- 单击“取消” 。
- 在 Windows 资源管理器中打开
将扩展性提供程序添加到 FTP 提供程序的全局列表中:
打开“Internet Information Services (IIS)管理器”。
在“连接”窗格中单击计算机名称。
双击主窗口中的“FTP 身份验证”。
单击“操作”窗格中的“自定义提供程序...”。
单击“注册”。
输入“FtpLoggingDemo”作为提供程序“名称”。
单击“托管提供程序(.NET)”。
使用之前复制的信息输入扩展性提供程序的程序集信息。 例如:
FtpLogging.FtpLogDemo,FtpLoggingDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
单击“确定”。
清除提供程序列表中的“FtpLoggingDemo”复选框。
单击“确定”。
将自定义提供程序添加到站点:
目前没有 UI 允许你向站点添加自定义功能,因此必须使用以下命令行:
AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpLoggingDemo',enabled='true'] /commit:apphost
总结
在此演练中,你了解了如何执行以下操作:
- 在 Visual Studio 2008 中为自定义 FTP 日志记录提供程序创建项目。
- 实现用于自定义 FTP 日志记录的扩展性接口。
- 将自定义日志记录提供程序添加到 FTP 服务。
当用户连接到 FTP 站点时,FTP 服务会在你在演示提供程序中指定的路径中创建一个日志文件。