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:

  1. 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.

  2. O novo serviço do FTP 7.5 deve ser instalado.

  3. Você deve criar uma pasta raiz para publicação FTP.

  4. 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.

  5. 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.

  1. Abra o Microsoft Visual Studio 2008.

  2. Selecione o menu Arquivo, em Novo e em Projeto.

  3. 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.
  4. 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
    • Selecione Adicionar Pasta.

  5. 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.
  6. 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
      
  7. Salvaro projeto.

Etapa 2: criar a classe extensibilidade

Nesta etapa, você vai implementar a interface de extensibilidade para o provedor de demonstração.

  1. 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.
  2. 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.
  3. 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;
              }
          }
      }
      
  4. 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.

  1. 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.
  2. 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.

  3. 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']
      
  4. 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.