Cómo usar el código administrado (C#) para crear un proveedor de directorio principal FTP simple
por Robert McMurray
Microsoft ha creado un nuevo servicio FTP que se ha reescrito completamente para Windows Server® 2008. Este nuevo servicio FTP incorpora muchas características nuevas que permiten a los autores web publicar contenido de una forma más sencilla y ofrece a los administradores web más opciones de seguridad e implementación.
El nuevo servicio FTP 7.5 admite extensibilidad que le permite ampliar la funcionalidad integrada que se incluye con el servicio FTP. En concreto, FTP 7.5 admite la creación de sus propios proveedores de autenticación y autorización. También puede crear proveedores para el registro de FTP personalizado y para determinar la información del directorio principal para los usuarios de FTP.
Este tutorial le llevará a través de diferentes pasos para usar el código administrado para crear un proveedor de directorio principal FTP simple.
Requisitos previos
Los siguientes elementos son necesarios para completar los procedimientos de esta sección:
Debe tener instalado IIS 7.0 o superior en su servidor de Windows Server 2008 y también debe tener instalado el Administrador de Internet Information Services (IIS).
El nuevo servicio FTP 7.5 debe estar instalado.
Debe crear una carpeta raíz para la publicación de FTP.
Debe usar Visual Studio 2008.
Nota:
Si usa una versión anterior de Visual Studio, es posible que algunos de los pasos de este tutorial no sean correctos.
Se debe crear un directorio principal para cada usuario; El ejemplo de código usa
C:\Ftpusers\%*UserName*%
, pero podría cambiarlo según sea necesario.
Paso 1: Configuración del entorno del proyecto
En este paso, creará un proyecto en Visual Studio 2008 para el proveedor de demostración.
Abra Microsoft Visual Studio 2008.
Haga clic en el menú Archivo, Nuevo y, luego, en Proyecto.
En el cuadro de diálogo Nuevo proyecto:
- Elija Visual C# como tipo de proyecto.
- Elija Biblioteca de clases como plantilla.
- Escriba FtpHomeDirectoryDemo como nombre del proyecto.
- Haga clic en OK.
Cuando se abra el proyecto, agregue una ruta de acceso de referencia a la biblioteca de extensibilidad de FTP:
Haga clic en Proyecto y después haga clic en Propiedades FtpHomeDirectoryDemo.
Haga clic en la pestaña Rutas de acceso de referencia.
Escriba la ruta al ensamblado de extensibilidad FTP para la versión de Windows, donde C: es la unidad del sistema operativo:
- Para Windows Server 2008 y Windows Vista:
C:\Windows\assembly\GAC\_MSIL\Microsoft.Web.FtpServer\7.5.0.0\_\_31bf3856ad364e35
- Para Windows 7:
C:\Program Files\Reference Assemblies\Microsoft\IIS
- Para Windows Server 2008 y Windows Vista:
Haga clic en Agregar carpeta.
Agregue al proyecto una clave de nombre seguro:
- Haga clic en Proyecto y después haga clic en Propiedades FtpHomeDirectoryDemo.
- Haga clic en la pestaña Firma.
- Marque la casilla Firmar el ensamblado.
- Elija <Nuevo> en el cuadro desplegable de nombre de clave segura.
- Escriba FtpHomeDirectoryDemoKey para el nombre de archivo de clave.
- Si lo desea, escriba una contraseña para el archivo de clave; de lo contrario, desactive la casilla Proteger mi archivo de clave con una contraseña.
- Haga clic en OK.
Opcional: puede agregar un evento de compilación personalizado para agregar el archivo DLL automáticamente a la caché global de ensamblados (GAC) en el equipo de desarrollo:
Haga clic en Proyecto y después haga clic en Propiedades FtpHomeDirectoryDemo.
Haga clic en la pestaña Eventos de compilación.
En el cuadro de diálogo Línea de comandos del evento posterior a la compilación, escriba el siguiente comando:
net stop ftpsvc call "%VS90COMNTOOLS%\vsvars32.bat">null gacutil.exe /if "$(TargetPath)" net start ftpsvc
Guarde el proyecto.
Paso 2: Creación de la clase de extensibilidad
En este paso, implementará la interfaz de extensibilidad para el proveedor de demostración.
Agregue una referencia a la biblioteca de extensibilidad FTP para el proyecto:
- Haga clic en Proyecto y después haga clic en Agregar referencia
- En la pestaña .NET, haga clic en Microsoft.Web.FtpServer.
- Haga clic en OK.
Agregue una referencia a System.Web para el proyecto:
- Haga clic en Proyecto y después haga clic en Agregar referencia
- En la pestaña .NET, haga clic en System.Web.
- Haga clic en OK.
Agregue el código para la clase de autenticación:
En el Explorador de soluciones, haga doble clic en el archivo Class1.cs.
Elimine el código existente.
Pegue el siguiente código en el editor:
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; } } }
Guarde el proyecto y compílelo.
Nota:
Si no ha usado los pasos opcionales para registrar los ensamblados en la GAC, deberá copiar manualmente los ensamblados en el equipo de IIS y agregar los ensamblados a la GAC mediante la herramienta Gacutil.exe. Para más información, consulte Gacutil.exe (Herramienta de caché global de ensamblados).
Paso 3: agregar el proveedor de directorios principales a FTP
En este paso, agregará el proveedor de demostración al servicio FTP y el sitio web predeterminado.
Determine la información del ensamblado para el proveedor de extensibilidad:
- En el Explorador de Windows, abra la ruta
C:\Windows\assembly
, donde C: es la unidad del sistema operativo. - Busque el ensamblado FtpHomeDirectoryDemo.
- Haga clic con el botón derecho en el ensamblado y, después, haga clic en Propiedades.
- Copie el valor Cultura; por ejemplo: Neutro.
- Copie el número de Versión; por ejemplo: 1.0.0.0.
- Copie el valor de Token de clave pública; por ejemplo: 426f62526f636b73.
- Haga clic en Cancelar.
- En el Explorador de Windows, abra la ruta
Agregue el proveedor de extensibilidad a la lista global de proveedores FTP:
Abra Administrador de Internet Information Services (IIS).
Haga clic en el nombre de equipo en el panel Conecciones.
Haga doble clic en Autenticación FTP en la ventana principal.
Haga clic en Proveedores personalizados en el panel Acciones.
Haga clic en Registrar.
Escriba FtpHomeDirectoryDemo como nombre del proveedor.
Haga clic en Proveedor de datos administrados (.NET).
Escriba la información de ensamblado para el proveedor de extensibilidad mediante la información que ha copiado antes. Por ejemplo:
FtpHomeDirectory.FtpHomeDirDemo,FtpHomeDirectoryDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
Haga clic en OK.
Desactive la casilla FtpHomeDirectoryDemo en la lista de proveedores.
Haga clic en OK.
Agregue el proveedor personalizado a un sitio:
En este momento no hay ninguna interfaz de usuario que le permita agregar características personalizadas a un sitio, por lo que tendrá que usar la siguiente línea de comandos:
AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpHomeDirectoryDemo',enabled='true']
Configure el aislamiento de usuario para usar un proveedor personalizado:
En este momento no hay ninguna interfaz de usuario que le permita especificar características personalizadas para el aislamiento de usuario, por lo que tendrá que usar la siguiente línea de comandos:
AppCmd set site "Default Web Site" /ftpServer.userIsolation.mode:Custom
Resumen
En este tutorial ha aprendido a:
- Crear un proyecto en Visual Studio 2008 para un proveedor de directorio principal FTP personalizado.
- Implementar la interfaz de extensibilidad para búsquedas personalizadas de directorio principal FTP.
- Agregar un proveedor de directorio principal personalizado al servicio FTP.
Cuando los usuarios se conectan al sitio FTP, el servicio FTP establecerá el directorio principal de cada usuario en la ruta de acceso especificada en el proveedor de demostración.