Verwendung von verwaltetem Code (C#) zur Erstellung eines einfachen FTP-Home-Directory-Providers
von Robert McMurray
Microsoft hat einen neuen FTP-Dienst entwickelt, der für Windows Server® 2008 komplett neu geschrieben wurde. Dieser neue FTP-Dienst enthält viele neue Funktionen, mit denen Web-Autoren und -Autorinnen Inhalte einfacher als bisher veröffentlichen können, und bietet Web-Admins mehr Sicherheit und Optionen für die Bereitstellung.
Der neue FTP 7.5-Dienst unterstützt die Erweiterbarkeit, mit der Sie die in den FTP-Dienst integrierten Funktionen erweitern können. Genauer gesagt, unterstützt FTP 7.5 die Erstellung Ihrer eigenen Authentifizierungs- und Autorisierungsanbieter. Sie können auch Anbieter für die benutzerdefinierte FTP-Protokollierung und für die Ermittlung der Startverzeichnis-Informationen für Ihre FTP-Benutzer und -Benutzerinnen erstellen.
Diese Anleitung führt Sie durch die Schritte zur Verwendung von verwaltetem Code, um einen einfachen FTP-Startverzeichnisanbieter zu erstellen.
Voraussetzungen
Die folgenden Elemente sind erforderlich, um die Verfahren in diesem Artikel abzuschließen:
IIS 7.0 oder höher muss auf Ihrem Windows Server 2008-Server installiert sein, und der Internetinformationsdienste (IIS)-Manager muss ebenfalls installiert sein.
Der neue FTP 7.5-Dienst muss installiert sein.
Sie müssen einen Stammordner für die FTP-Veröffentlichung erstellen.
Sie müssen Visual Studio 2008 verwenden.
Hinweis
Wenn Sie eine frühere Version von Visual Studio verwenden, sind einige der Schritte in dieser Anleitung möglicherweise nicht korrekt.
Für jedes Benutzerkonto muss ein Startverzeichnis erstellt werden. Das Codebeispiel verwendet
C:\Ftpusers\%*UserName*%
, aber Sie können dies bei Bedarf ändern.
Schritt 1: Einrichten der Projektumgebung
In diesem Schritt erstellen Sie ein Projekt in Visual Studio 2008 für den Demoanbieter.
Öffnen Sie Microsoft Visual Studio 2008.
Klicken Sie auf das Menü Datei, dann auf Neu und dann auf Projekt.
Im Dialogfeld Neues Projekt:
- Wählen Sie Visual C# als Projekttyp aus.
- Wählen Sie Klassenbibliothek als Vorlage aus.
- Geben Sie FtpHomeDirectoryDemo als Namen des Projekts ein.
- Klicken Sie auf OK.
Wenn das Projekt geöffnet wird, fügen Sie der FTP-Erweiterbarkeitsbibliothek einen Verweispfad hinzu:
Klicken Sie auf Projekt und dann auf Eigenschaften von FtpHomeDirectoryDemo.
Klicken Sie auf die Schaltfläche Verweispfade.
Geben Sie den Pfad zur FTP-Erweiterbarkeitsassembly für Ihre Windows-Version ein, wobei „C:“ Ihr Betriebssystemlaufwerk ist:
- Für Windows Server 2008 und Windows Vista:
C:\Windows\assembly\GAC\_MSIL\Microsoft.Web.FtpServer\7.5.0.0\_\_31bf3856ad364e35
- Für Windows 7:
C:\Program Files\Reference Assemblies\Microsoft\IIS
- Für Windows Server 2008 und Windows Vista:
Klicken Sie auf Ordner hinzufügen.
Fügen Sie dem Projekt einen Schlüssel mit einem starken Namen hinzu:
- Klicken Sie auf Projekt und dann auf Eigenschaften von FtpHomeDirectoryDemo.
- Klicken Sie auf die Registerkarte Signierung.
- Aktivieren Sie das Kontrollkästchen Assembly signieren.
- Wählen Sie aus dem Dropdownfeld mit starkem Schlüsselnamen <Neu> aus.
- Geben Sie für den Schlüsseldateinamen FtpHomeDirectoryDemoKey ein.
- Geben Sie bei Bedarf ein Kennwort für die Schlüsseldatei ein; deaktivieren Sie andernfalls das Kontrollkästchen Meine Schlüsseldatei mit einem Kennwort schützen.
- Klicken Sie auf OK.
Optional: Sie können ein benutzerdefiniertes Build-Ereignis hinzufügen, um die DLL automatisch dem globalen Assemblycache (GAC) auf Ihrem Entwicklungscomputer hinzuzufügen:
Klicken Sie auf Projekt und dann auf Eigenschaften von FtpHomeDirectoryDemo.
Klicken Sie auf die Registerkarte Buildereignisse.
Geben Sie im Dialogfeld Befehlszeile für Post-Build-Ereignis Folgendes ein:
net stop ftpsvc call "%VS90COMNTOOLS%\vsvars32.bat">null gacutil.exe /if "$(TargetPath)" net start ftpsvc
Speichern Sie das Projekt.
Schritt 2: Erstellen der Erweiterbarkeitsklasse
In diesem Schritt implementieren Sie die Erweiterbarkeitsschnittstelle für den Demoanbieter.
Fügen Sie einen Verweis auf die FTP-Erweiterbarkeitsbibliothek für das Projekt hinzu:
- Klicken Sie auf Projekt, und klicken Sie dann auf Verweis hinzufügen
- Klicken Sie auf der Registerkarte .NET auf Microsoft.Web.FtpServer.
- Klicken Sie auf OK.
Fügen Sie einen Verweis auf System.Web für das Projekt hinzu:
- Klicken Sie auf Projekt, und klicken Sie dann auf Verweis hinzufügen
- Klicken Sie auf der Registerkarte .NET auf System.Web.
- Klicken Sie auf OK.
Fügen Sie den Code für die Authentifizierungsklasse hinzu:
Doppelklicken Sie im Projektmappen-Explorer auf die Datei Class1.cs.
Entfernen Sie den vorhandenen Code.
Fügen Sie den folgenden Code in den Editor ein:
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; } } }
Speichern und kompilieren Sie das Projekt.
Hinweis
Wenn Sie die optionalen Schritte zur Registrierung der Assemblys im GAC nicht verwendet haben, müssen Sie die Assemblys manuell auf Ihren IIS-Computer kopieren und die Assemblys mit dem Tool Gacutil.exe zum GAC hinzufügen. Weitere Informationen finden Sie in dem Artikel Gacutil.exe (Tool für den globalen Assemblycache).
Schritt 3: Hinzufügen des Startverzeichnisanbieters zu FTP
In diesem Schritt fügen Sie den Demoanbieter zu Ihrem FTP-Dienst und der Standardwebsite hinzu.
Ermitteln Sie die Assembly-Informationen für den Erweiterbarkeitsanbieter:
- Öffnen Sie im Windows-Explorer Ihren Pfad
C:\Windows\assembly
, wobei „C:“ Ihr Betriebssystemlaufwerk ist. - Suchen Sie die Assembly FtpHomeDirectoryDemo.
- Klicken Sie mit der rechten Maustaste auf die Assembly und klicken Sie dann auf Eigenschaften.
- Kopieren Sie den Wert Culture, z. B. Neutral.
- Kopieren Sie die Version-Nummer, z. B. 1.0.0.0.
- Kopieren Sie den Wert Public Key Token, z. B. 426f62526f636b73.
- Klicken Sie auf Abbrechen.
- Öffnen Sie im Windows-Explorer Ihren Pfad
Fügen Sie den Erweiterbarkeitsanbieter zur globalen Liste der FTP-Anbieter hinzu:
Öffnen Sie den Internetinformationsdienste (IIS)-Manager.
Klicken Sie im Bereich Verbindungen auf ihren Computernamen.
Doppelklicken Sie im Hauptfenster auf die FTP-Authentifizierung.
Klicken Sie auf Benutzerdefinierte Anbieter (im Bereich Aktionen).
Klicken Sie auf Registrieren.
Geben Sie FtpHomeDirectoryDemo als Name des Anbieters ein.
Klicken Sie auf Managed Provider (.NET).
Geben Sie die Assemblyinformationen für den Erweiterungsanbieter ein, und verwenden Sie dabei die Informationen, die Sie zuvor kopiert haben. Zum Beispiel:
FtpHomeDirectory.FtpHomeDirDemo,FtpHomeDirectoryDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
Klicken Sie auf OK.
Deaktivieren Sie das Kontrollkästchen FtpHomeDirectoryDemo in der Anbieterliste.
Klicken Sie auf OK.
Hinzufügen des benutzerdefinierten Anbieters zu einer Site:
Derzeit gibt es keine Benutzeroberfläche, mit der Sie einer Site benutzerdefinierte Funktionen hinzufügen können. Sie müssen also die folgende Befehlszeile verwenden:
AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpHomeDirectoryDemo',enabled='true']
Konfigurieren der Benutzerisolation für die Verwendung eines benutzerdefinierten Anbieters:
Derzeit gibt es keine Benutzeroberfläche, über die Sie benutzerdefinierte Funktionen für die Benutzerisolierung festlegen können. Sie müssen also die folgende Befehlszeile verwenden:
AppCmd set site "Default Web Site" /ftpServer.userIsolation.mode:Custom
Zusammenfassung
In dieser Anleitung haben Sie folgendes gelernt:
- Erstellen eines Projekts in Visual Studio 2008 für einen benutzerdefinierten FTP-Startverzeichnisanbieter.
- Implementieren der Erweiterbarkeitsschnittstelle für benutzerdefinierte FTP-Startverzeichnis-Lookup.
- Hinzufügen eines benutzerdefinierten Heimverzeichnisanbieters zu Ihrem FTP-Dienst.
Wenn sich jemand mit Ihrer FTP-Site verbinden, setzt der FTP-Dienst das Startverzeichnis des Benutzers bzw. der Benutzerin auf den Pfad, den Sie im Demo-Provider angegeben haben.