Como Usar Código Gerenciado (C#) para Criar um Provedor de Diretório Base FTP Simples
por Robert McMurray
A Microsoft criou um novo serviço FTP que foi completamente reescrito para o Windows Server® 2008. Esse novo serviço FTP incorpora muitos novos recursos que permitem que os autores da Web publiquem conteúdo com mais facilidade do que antes e oferece aos administradores da Web mais opções de segurança e implantação.
O novo serviço do FTP 7.5 dá suporte à extensibilidade que permite a você estender a funcionalidade interna incluída no serviço do FTP. Mais especificamente, o FTP 7.5 dá suporte à criação de seus próprios provedores de autenticação e autorização. Também é possível criar provedores para registro em log do FTP personalizado e para determinar as informações de diretório base para os usuários do FTP.
Este passo a passo levará você pelas etapas para usar o código gerenciado para criar um provedor de diretório base FTP simples.
Pré-requisitos
Os seguintes itens são necessários para concluir os procedimentos nessa seção:
O IIS 7.0 ou superior deve ser instalado no Windows Server 2008 e o Gerenciador do IIS (Serviços de Informações da Internet) também deve ser instalado.
O novo serviço do FTP 7.5 deve ser instalado.
Você deve criar uma pasta raiz para publicação FTP.
Você deve usar o Visual Studio 2008.
Observação
Caso use uma versão anterior do Visual Studio, algumas das etapas neste passo a passo poderão não estar corretas.
Um diretório base para cada usuário deve ser criado; o exemplo de código usa
C:\Ftpusers\%*UserName*%
, mas você pode alterá-lo conforme necessário.
Etapa 1: configurar o ambiente do projeto
Nesta etapa, você vai criar um projeto no Visual Studio 2008 para o provedor de demonstração.
Abra o Microsoft Visual Studio 2008.
Selecione o menu Arquivo, em Novo e em Projeto.
Na caixa de diálogo Novo Projeto:
- Escolha Visual C# como o tipo de projeto.
- Escolha Biblioteca de Classes como o modelo.
- Digite FtpHomeDirectoryDemo como o nome do projeto.
- Clique em OK.
Quando o projeto for aberto, adicione um caminho de referência à biblioteca de extensibilidade do FTP:
Selecione Projeto e selecione Propriedades FtpHomeDirectoryDemo.
Selecione o guia Caminhos de referência.
Insira o caminho para o assembly de extensibilidade do FTP para sua versão do Windows, em que C: é a unidade do sistema operacional:
- Para Windows Server 2008 e 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 e Windows Vista:
Selecione Adicionar Pasta.
Adicione uma chave de nome forte ao projeto:
- Selecione Projeto e selecione Propriedades FtpHomeDirectoryDemo.
- Clique na guia Assinatura .
- Marque a caixa de seleção Assinar o assembly.
- Escolha <Novo> na caixa suspensa nome de chave forte.
- Insira FtpHomeDirectoryDemoKey para o nome do arquivo de chave.
- Se desejar, insira uma senha para o arquivo de chave; caso contrário, desmarque a caixa de seleção Proteger meu arquivo de chave com uma senha.
- Clique em OK.
Opcional: você pode adicionar um evento de build personalizado para adicionar a DLL automaticamente ao GAC (Cache de Assembly Global) em seu computador de desenvolvimento:
Selecione Projeto e selecione Propriedades FtpHomeDirectoryDemo.
Selecione o guia Eventos de Build.
Insira o seguinte na caixa de diálogo Linha de Comando do evento pós-build:
net stop ftpsvc call "%VS90COMNTOOLS%\vsvars32.bat">null gacutil.exe /if "$(TargetPath)" net start ftpsvc
Salvaro projeto.
Etapa 2: criar a classe extensibilidade
Nesta etapa, você vai implementar a interface de extensibilidade para o provedor de demonstração.
Adicione uma referência à biblioteca de extensibilidade do FTP para o projeto:
- Selecione Projeto e selecione Adicionar referência
- No guia .NET, selecione Microsoft.Web.FtpServer.
- Clique em OK.
Adicione uma referência ao System.Web para o projeto:
- Selecione Projeto e selecione Adicionar referência
- No guia .NET, selecione System.Web.
- Clique em OK.
Adicione o código para a classe de autenticação:
No Gerenciador de Soluções, clique duas vezes no arquivo Class1.cs.
Remova o código existente.
Cole o código a seguir no 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; } } }
Salve e compile o projeto.
Observação
Se você não tiver usado as etapas opcionais para registrar os assemblies no GAC, será necessário copiar manualmente os assemblies para o computador IIS e adicionar os assemblies ao GAC usando a ferramenta Gacutil.exe. Para obter mais informações, confira o artigo Ferramenta de Cache de Assembly Global (Gacutil.exe).
Etapa 3: adicionar o provedor de diretório base ao FTP
Nesta etapa, você vai adicionar o provedor de demonstração ao serviço do FTP e ao site padrão.
Determine as informações do assembly para o provedor de extensibilidade:
- No Windows Explorer, abra seu caminho
C:\Windows\assembly
, em que C: é a unidade do sistema operacional. - Localize o assembly FtpHomeDirectoryDemo.
- Clique com o botão direito do mouse no assembly e em Propriedades.
- Copie o valor Cultura, por exemplo: Neutro.
- Copie o número de Versão, por exemplo: 1.0.0.0.
- Copie o valor do Token de Chave Pública, por exemplo: 426f62526f636b73.
- Clique em Cancelar.
- No Windows Explorer, abra seu caminho
Adicione o provedor de extensibilidade à lista global de provedores FTP:
Abra o Gerenciador do IIS (Serviços de Informações da Internet).
Clique no nome do computador no painel Conexões.
Clique duas vezes na Autenticação do FTP na janela principal.
Clique em Provedores Personalizados no painel Ações.
Clique em Registrar.
Insira FtpHomeDirectoryDemo para o Nome do provedor.
Selecione provedor gerenciado (.NET).
Insira as informações do assembly para o provedor de extensibilidade usando as informações copiadas antes. Por exemplo:
FtpHomeDirectory.FtpHomeDirDemo,FtpHomeDirectoryDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73
Clique em OK.
Desmarque a caixa de seleção FtpHomeDirectoryDemo na lista de provedores.
Clique em OK.
Adicione o provedor personalizado a um site:
No momento, não há nenhuma interface do usuário que permita adicionar recursos personalizados a um site, portanto, você precisará usar a seguinte linha de comando:
AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpHomeDirectoryDemo',enabled='true']
Configure o isolamento do usuário para usar um provedor personalizado:
No momento, não há nenhuma interface do usuário que permita especificar recursos personalizados para isolamento do usuário, portanto, você terá que usar a seguinte linha de comando:
AppCmd set site "Default Web Site" /ftpServer.userIsolation.mode:Custom
Resumo
Neste passo a passo, você aprendeu a:
- Criar um projeto no Visual Studio 2008 para um provedor de diretório base FTP personalizado.
- Implementar a interface de extensibilidade para pesquisas personalizadas de diretório base FTP.
- Adicionar um provedor de diretório base personalizado ao serviço FTP.
Quando os usuários se conectam ao seu site FTP, o serviço FTP definirá o diretório base de cada usuário para o caminho especificado no provedor de demonstração.