Como Criar um Módulo Simples do Gerenciador do IIS
A nova ferramenta de Gerenciamento web do IIS 7.0 e posterior é uma plataforma de desenvolvedor extensível. Terceiros podem desenvolver e instalar seus próprios recursos de gerenciamento que aparecem como recursos de primeira classe na ferramenta. As tarefas ilustradas neste artigo incluem:
- A criação do projeto no Microsoft Visual Studio ou no Microsoft Visual C# Express para que a biblioteca possa ser usada dentro do InetMgr
- A criação de um provedor de módulo simples
- A criação de um módulo simples que exibe uma caixa de mensagem.
Etapa 1: Criar o projeto
Para criar um módulo de extensibilidade para o InetMgr, você deve criar um projeto DLL também conhecido como um projeto da Biblioteca de Classes. Essa DLL precisa ser fortemente nomeada para que possa ser registrada no GAC (Cache de Assembly Global), que é um requisito para módulos usados pelo InetMgr.
Clique em Iniciar, clique em Programas e execute o Microsoft Visual Studio 2005 ou o Microsoft Visual C# 2005 Express Edition
No Menu Arquivo, selecione a opção Novo Projeto.
Na caixa de diálogo Novo Projeto, selecione Biblioteca de Classes como o tipo de projeto e digite ExtensibilityDemo como o nome do projeto. Clique em OK.
Remova o arquivo Class1.cs adicionado por padrão (já que não usaremos esse arquivo) usando a opção Excluir do menu de contexto no Gerenciador de Soluções.
Usando a opção Adicionar Referência... no Menu projeto, adicione uma referência a Microsoft.Web.Management.dll usando a guia Procurar e pesquise-a no diretório \Windows\system32\inetsrv. Essa é a DLL que contém todas as classes de extensibilidade necessárias para a criação de módulos para o InetMgr.
Como usamos o código para criar a interface do usuário com base no WinForms, devemos adicionar uma referência a System.Windows.Forms.dll. Para isso, use a opção Adicionar Referência... no Menu projeto e selecione System.Windows.Forms.dll na lista de assemblies do .NET.
Um dos requisitos para bibliotecas usadas no InetMgr é que elas devem ser registradas dentro do GAC. Verifique se a DLL é fortemente nomeada (às vezes conhecida como Assinada). O Visual Studio oferece uma maneira fácil de criar e novos nomes. Use o menu Projeto, selecione a opção ExtensibilityDemo Properties.
Na guia Assinar, marque a caixa de seleção Assinar o assembly.
Na caixa de combinação, selecione a opção <Novo...> para criar uma nova chave. Na caixa de diálogo Criar Chave de Nome Forte, digite DemoKey.snk como o nome da chave e desmarque o arquivo Proteger minha chave com uma caixa de seleção de senha. Clique em OK.
A guia de assinatura deve ser exibida da seguinte maneira:
Como queremos que o assembly esteja no GAC, adicionamos alguns eventos de pós-build para que o assembly seja adicionado automaticamente ao GAC sempre que compilamos. Isso facilita a depuração, além de fazer alterações à medida que adicionamos novas funcionalidades.
Selecione a guia Eventos de Build e adicione a seguinte linha de comando Evento pós-build:
CALL "%VS80COMNTOOLS%\vsvars32.bat" > NULL gacutil.exe /if "$(TargetPath)"
(Opcional) Se você estiver usando o Microsoft Visual Studio 2005, configure a depuração corretamente para poder usar F5 para executar o código. Nas propriedades do projeto, selecione a guia Depurar e defina-a para iniciar um programa externo escolhendo \windows\system32\inetsrv\inetmgr.exe.
Feche as propriedades do projeto e selecione a opção Salvar Tudo no Menu Arquivo e defina o local como d:\Demos. Clique em Save (Salvar).
Agora você pode compilar o projeto usando a Solução de compilação no menu Compilação. Ela compila automaticamente a DLL e a adiciona ao GAC.
Observação
Se o comando para definir vsvars32.bat não funcionar com um código de erro 9009, substitua o comando adicionado nos eventos pós-build na etapa 8, adicionando o caminho completo ao gacutil.exe, por exemplo:
"D:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if "$(TargetPath)"
Tarefa 2: Criando um provedor de módulo
Nesta tarefa, você cria um provedor de módulos; este é o principal ponto de entrada para o registro de módulos no InetMgr. Esses provedores de módulo são listados em Administration.config.
Selecione a opção Adicionar Novo Item no menu Projeto. Na caixa de diálogo Adicionar Novo Item, selecione o modelo de Classe e digite DemoModuleProvider.cs como o nome do arquivo.
Altere o código para que ele fique da seguinte maneira:
using System; using System.Security; using Microsoft.Web.Management.Server; namespace ExtensibilityDemo { class DemoModuleProvider : ModuleProvider { public override Type ServiceType { get { return null; } } public override ModuleDefinition GetModuleDefinition(IManagementContext context) { return new ModuleDefinition(Name, typeof(DemoModule).AssemblyQualifiedName); } public override bool SupportsScope(ManagementScope scope) { return true; } } }
Esse código cria um ModuleProvider que dá suporte a todos os tipos de conexões (Servidor, Site e Aplicativo) e registra um módulo do lado do cliente chamado DemoModule.
Tarefa 3: Criando um módulo
Nesta tarefa, você aprenderá a criar um Módulo. Um Módulo é o principal ponto de entrada no cliente para todos os objetos de extensibilidade. Ele tem um método principal chamado Initialize. Esse é o método em que toda a ação ocorre.
Selecione a opção Adicionar Novo Item no menu Projeto. Selecione o modelo de classe e digite DemoModule.cs como o nome do arquivo.
Altere o código para que ele fique da seguinte maneira:
using System; using System.Windows.Forms; using Microsoft.Web.Management.Client; using Microsoft.Web.Management.Server; namespace ExtensibilityDemo { internal class DemoModule : Module { protected override void Initialize(IServiceProvider serviceProvider, ModuleInfo moduleInfo) { base.Initialize(serviceProvider, moduleInfo); MessageBox.Show("Hello World Inside InetMgr"); } } }
Tarefa 4: Testando o módulo
Nesta tarefa, você adicionará o novo módulo criado. Para isso, devemos adicioná-lo ao arquivo administration.config na lista moduleProviders.
Primeiro, devemos descobrir o nome completo do assembly que acabamos de criar. Ele está na forma de "ExtensibilityDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken={YourKey}". Use o Windows Explorer para encontrá-lo.
Abra o Windows Explorer e navegue até a pasta *Windows\Assembly*.
Procure ExtensibilityDemo na lista de assemblies e clique com o botão direito do mouse nele e selecione Propriedades. Na caixa de diálogo, você verá um campo chamado Token de Chave Pública; precisamos desse valor para registrá-lo no InetMgr, portanto, copie-o para a área de transferência.
De volta ao Microsoft Visual C# 2005 Express, selecione a opção Abrir Arquivo... no Menu Arquivo. Procure o arquivo \Windows\System32\InetSrv\Administration.config.
Pesquise a seção <moduleProviders> e adicione o seguinte, mas substitua o Token de Chave Pública pelo que copiamos na etapa 2:
<moduleProviders> <add name="ExtensibilityDemo" type="ExtensibilityDemo.DemoModuleProvider, ExtensibilityDemo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bed679b1975c7f97" /> <moduleProviders>
Observação
Ao adicioná-lo apenas à lista de moduleProviders, você está registrando o módulo somente para conexões de servidor. Se você quiser que esse módulo seja habilitado para conexões de site, bem como conexões de aplicativo, adicione-o à seguinte lista:
<location path="."> <module> <add name="ExtensibilityDemo" /> </location>
Salve o Arquivo e execute o InetMgr, conecte-se ao localhost e você verá a seguinte mensagem:
Resumo
Este artigo explicou como criar um projeto do Visual Studio para desenvolver módulos de extensibilidade para a nova Ferramenta de Gerenciamento do IIS. Criamos um ModuleProvider simples e seu equivalente de módulo para exibir uma mensagem.
Agora que você entende os conceitos básicos da criação de Módulos da Ferramenta de Gerenciamento do IIS, você pode explorar recursos mais interessantes disponíveis para extensibilidade.