Visão geral do MWA e MWM para IIS 7.0
por Janani Ravi
Resumo
A extensão da ferramenta Gerenciador do IIS para gerenciar a configuração personalizada (nos arquivos de configuração distribuída) no servidor IIS 7.0 e superior envolve o uso de APIs de dois assemblies diferentes, o Microsoft.Web.Administration.dll e o Microsoft.Web.Management.dll. Essas APIs devem ser usadas para ações muito diferentes e têm finalidades fundamentalmente diferentes. Este documento fornece uma visão geral rápida de quais funcionalidades essas APIs fornecem e a relação entre elas.
Introdução
Se você estiver planejando adicionar a interface do usuário ao Gerenciador do IIS (InetMgr) para gerenciar configurações personalizadas nos arquivos de configuração do servidor, usará APIs do Microsoft.Web.Administration.dll e do Microsoft.Web.Management.dll. A funcionalidade fornecida pelas APIs desses assemblies é fundamentalmente diferente e pode ser confusa para um desenvolvedor que a usa pela primeira vez. Este artigo fornecerá uma breve visão geral do que cada um desses assemblies oferece.
O que são Microsoft.Web.Administration e Microsoft.Web.Management?
Esta seção fornece uma breve introdução a cada uma delas.
Microsoft.Web.Administration
As APIs do MWA (Microsoft.Web.Administration) são criadas como um wrapper de código gerenciado sobre a AHADMIN (Application Host Administration API), que é uma biblioteca de interface de código nativa. Ela fornece uma maneira programática de acessar e atualizar as informações de configuração e administração do servidor Web.
O Microsoft.Web.Administration.dll é uma maneira fácil para os usuários ajustarem as configurações no servidor. Ele não dá suporte à adição de qualquer extensibilidade ou funcionalidade da interface do usuário. Na verdade, vários recursos da interface do usuário no Gerenciador do IIS usam essa API para gerenciar definições de configuração no back-end.
A API MWA é usada quando um desenvolvedor quer escrever um programa em código gerenciado (C#, VB etc.) para configurar o servidor em uma ordem de maneira específica. Essa API é usada de aplicativos de console autônomos ou de dentro de um recurso de interface do usuário no Gerenciador do IIS.
Essas APIs também têm suporte para acessar a configuração em tempo de execução (por exemplo, de um módulo gerenciado no pipeline do IIS).
Microsoft.Web.Management
O Microsoft.Web.Management.dll tem a estrutura para adicionar novos recursos de interface do usuário à ferramenta Gerenciador do IIS. A estrutura tem a extensibilidade para desenvolver novos recursos e fornece classes base e outras funcionalidades. Isso permite que as extensões definidas pelo usuário sejam cidadãos de primeira classe na interface do usuário e tenham uma aparência idêntica aos recursos internos do IIS e do ASP.Net.
O Gerenciador do IIS tem uma infraestrutura modular em que cada recurso da interface do usuário é sua própria entidade e precisa ser registrado individualmente com a ferramenta. A arquitetura cliente-servidor do Gerenciador do IIS separa a lógica, que manipula as configurações do servidor do código. Isso exibe as configurações de maneira amigável. Cada recurso da ferramenta segue esse paradigma cliente-servidor. Isso é aplicado fornecendo classes base bem definidas para o código da interface do usuário do servidor e do cliente no Gerenciador do IIS.
Essa API também fornece o mecanismo de extensibilidade para desenvolver recursos de interface do usuário representados como listas, grades de propriedades, painéis de Ações personalizados, assistentes modais e caixas de diálogo (para citar alguns).
Muitos recursos de interface do usuário existentes fornecidos com a ferramenta usam as APIs MWA (no código do lado do servidor) para acessar a configuração.
Microsoft.Web.Administration
Como mencionado anteriormente, as APIs MWA podem ser usadas para manipular configurações no servidor. Elas fornecem acesso interno fortemente tipado a sites, aplicativos e diretórios virtuais configurados para o IIS. Essas APIs também permitem que os usuários gerem suas próprias classes fortemente tipadas representando seções de configuração específicas e, assim, criem uma maneira fácil de acessar propriedades e outras informações armazenadas nessas seções.
Esta não é de forma alguma uma lista completa, e este assembly oferece muito mais do que está descrito aqui.
ServerManager e sites, aplicativos e diretórios virtuais
O ponto de entrada para administrar as propriedades do servidor é a classe ServerManager. O ServerManager tem uma referência à lista de todos os sites no servidor IIS e sites individuais são acessados pela indexação no conjunto de sites.
Aplicativos e diretórios virtuais são acessados de maneira semelhante. Essas entidades também fornecem informações de estado do runtime (por exemplo, se um site é iniciado/interrompido). As atualizações são feitas nas configurações padrão de todo o servidor ou nas propriedades que pertencem a uma entidade individual (por exemplo, atualizações para um site específico).
As configurações do servidor são atualizadas quando CommitChanges é chamado no ServerManager.
Esta é uma visão geral de algumas das classes fortemente tipadas oferecidas por esse assembly:
Acessar Arquivos de Configuração Individuais
O modelo de arquivo de configuração distribuída que o IIS usa permite que um site, aplicativo, diretório virtual ou até mesmo uma pasta tenha sua configuração em um arquivo web.config.
É possível acessar arquivos de configuração individuais para ajustar as configurações de uma entidade específica. O método GetApplicationHostConfiguration do ServerManager é usado para acessar o applicationHost.config, enquanto o método GetWebConfiguration aceita parâmetros para obter arquivos de configuração específicos.
Classes Base Genéricas para Extensibilidade
O sistema de configuração do IIS permite que você crie uma seção onde especifica propriedades relevantes para seu aplicativo. Usando as APIs MWA, crie classes fortemente tipadas em código gerenciado para manipular essas configurações. Algumas das classes base que facilitam isso são:
- Configuração: representa um único arquivo de configuração (applicationHost.config ou os arquivos web.config para sites e aplicativos)
- ConfigurationElement: uma entidade genérica usada para representar um elemento em um arquivo de configuração. Essa é a classe base para seções de configuração, entradas de coleção, elementos aninhados em uma seção etc.
- ConfigurationAttribute: representa uma propriedade em um ConfigurationElement
- ConfigurationSection: é derivado do ConfigurationElement e representa uma seção definida nos arquivos de esquema do IIS. Usado para acessar as várias propriedades de uma seção.
- ConfigurationElementCollection: uma classe de coleção composta por ConfigurationElements. Também é derivado do ConfigurationElement.
Uma visão geral simples da extensibilidade de configuração genérica é mostrada abaixo:
Acesso de Runtime à Configuração
O WebConfigurationManager é usado para acesso de runtime às definições de configuração do servidor. Um módulo gerenciado carregado no pipeline do IIS acessa as definições de configuração em seu contexto específico (por exemplo, uma solicitação para um site específico) fazendo referência a essa classe.
Microsoft.Web.Management
As APIs Microsoft.Web.Management (MWM) são os blocos de construção para desenvolver código do lado do servidor para manipular as configurações de administração e os recursos da interface do usuário do lado do cliente (que permitem que os usuários exibam e manipulem essas configurações de maneira amigável).
Breves descrições de algumas das classes importantes em cada namespace são fornecidas abaixo. Mais uma vez, esta não é uma lista completa e este assembly oferece muito mais do que é discutido aqui.
Uma visão de alto nível do que esta montagem oferece:
Microsoft.Web.Management.Server
As classes derivadas da classe base ModuleProvider formam o ponto de entrada para o Gerenciador do IIS identificar um módulo de interface do usuário. Essa é a classe que deve ser registrada no administration.config para que o Gerenciador do IIS a exiba como parte de seu conjunto de recursos.
As classes derivadas da classe base ModuleService formam o cerne da administração do lado do servidor. Essas classes executam a manipulação de configurações reais do servidor. Os métodos na classe que devem ser visíveis para o cliente da interface do usuário são marcados com o atributo ModuleServiceMethod.
O ManagementUnit fornece ao desenvolvedor o contexto no qual o servidor é administrado. Por exemplo, o SiteManagementUnit e o ApplicationManagementUnit correspondem a conexões de site e conexões de aplicativo na ferramenta Gerenciador do IIS. A classe base ModuleService expõe a ManagementUnit atual que pode ser usada para acessar informações sobre o contexto atual.
ManagementConfigurationPath é uma classe que representa um caminho (para o servidor, site, aplicativo ou pasta atual). Se você estiver administrando um site, conterá o nome do site e outras informações relevantes sobre o site. O ManagementUnit expõe o ManagementConfigurationPath atual.
A ManagementConfiguration é uma classe auxiliar para acessar e manipular definições de configuração no servidor. Essa é uma abstração muito poderosa para a classe Configuration na API MWA definida anteriormente e permite que você consulte seções sem se preocupar se elas estão definidas em applicationHost.config ou no web.config raiz.
O PropertyBag é uma espécie de contêiner usado para armazenar informações que são transferidas entre o cliente e o servidor. Isso é implementado como um dicionário genérico. O dicionário é serializado em uma cadeia de caracteres durante a transferência de dados em cenários nos quais o servidor é administrado remotamente.
Microsoft.Web.Management.Client
As classes derivadas da classe base Module formam o ponto de entrada para um recurso registrar seus componentes de interface do usuário. Isso indica se a interface do usuário deste módulo é uma página (exibida no painel central do Gerenciador do IIS), um nó na árvore ou apenas uma tarefa no painel Ações (para listar alguns exemplos).
O ModuleServiceProxy é a classe base para os stubs de método usados para acessar os métodos de serviço reais especificados no ModuleService no servidor.
O HierarchyInfo representa um nó no modo de exibição de árvore e dá suporte a várias ações no nó.
A classe Connection tem todas as informações de contexto para a sessão de gerenciamento atual (uma sessão de gerenciamento que define uma conexão com um servidor, site ou aplicativo). Ela fornece auxiliares para acessar serviços, criar proxies etc.
O TaskItem é a classe base para as tarefas adicionadas ao painel Ações no Gerenciador do IIS. Classes como MethodTaskItem, TextTaskItem etc. derivam dessa classe base e exibem links, rótulos, alertas e outras informações no painel Ações. O desenvolvedor não precisa escrever nenhum código de interface do usuário adicional para exibir essas ações.
Microsoft.Web.Management.Client.Win32
O ModulePage é a classe base para todos os recursos que exibem uma "página" no painel central da ferramenta Gerenciador do IIS. Classes como ModuleListPage, ModuleDialogPage e ModulePropertiesPage derivam do ModulePage. Essas são classes base que fornecem uma maneira fácil de desenvolver páginas que exibem listas, caixas de diálogo e grades de propriedades.
A classe base TaskForm permite que os desenvolvedores criem formulários que são mostrados como uma caixa de diálogo modal.
O WizardForm forma as classes base de todas as caixas de diálogo. Os desenvolvedores podem especificar várias classes derivadas do WizardPage para conectar ao assistente.
Microsoft.Web.Management.Client.Extensions
As classes nesse namespace fornecem extensibilidade do lado do cliente usando o IExtensibilityManager. Por exemplo, o AuthenticationFeature tem as tarefas para cada entrada no recurso de autenticação na ferramenta InetMgr.
Esta é uma breve visão geral da funcionalidade que as APIs Microsoft.Web.Administration e Microsoft.Web.Management oferecem a um desenvolvedor que deseja estender a configuração e a interface do usuário para adicionar seus próprios recursos. Para obter descrições mais detalhadas de como a extensibilidade de configuração e a extensibilidade da interface do usuário funcionam, confira os artigos individuais que abordam esses tópicos.