Integração com visão geral de aplicativos COM+
O WCF (Windows Communication Foundation) fornece um ambiente avançado para a criação de aplicativos distribuídos. Se você já estiver usando lógica de aplicativo baseada em componente hospedada em COM+, você pode usar o WCF para estender sua lógica existente em vez de ter que regravá-la. Um cenário comum é quando você deseja expor a lógica de negócios existente do COM+ ou dos Serviços Empresariais por meio dos Serviços Web.
Quando uma interface em um componente COM+ é exposta como um serviço Web, a especificação e o contrato desses serviços são determinados por um mapeamento automático que é executado no momento da inicialização do aplicativo. A lista a seguir mostra o modelo conceitual para este mapeamento:
Um serviço é definido para cada classe COM exposta.
O contrato para o serviço é derivado diretamente da definição de interface do componente selecionado com a possibilidade de exclusão de método definida na configuração.
As operações nesse contrato são derivadas diretamente dos métodos na definição de interface do componente.
Os parâmetros para essas operações são derivados diretamente do tipo de interoperabilidade COM que corresponde aos parâmetros de método do componente.
Endereços padrão e associações de transporte para o serviço são fornecidos em um arquivo de configuração de serviço, mas podem ser reconfigurados conforme necessário.
Observação
Os contratos para os serviços Web expostos permanecem constantes enquanto as interfaces e a configuração COM+ permanecerem inalteradas. Uma modificação em várias interfaces não atualiza automaticamente os serviços disponíveis e requer uma nova execução da ferramenta de configuração de modelo do serviço COM+ (ComSvcConfig.exe).
Os requisitos de autenticação e autorização do aplicativo COM+ e seus componentes continuam a ser aplicados quando usados como um serviço Web.
Se o chamador iniciar uma transação de serviço Web, os componentes marcados como transacionais se inscrevem nesse escopo de transação.
As etapas a seguir são necessárias para expor a interface de um componente COM+ como um serviço Web sem modificar o componente:
Determine se a interface do componente COM+ pode ser exposta como um serviço Web.
Selecione um modo de hospedagem apropriado.
Use a ferramenta de configuração de modelo do serviço COM+ (ComSvcConfig.exe) para adicionar um serviço Web para a interface. Para obter mais informações sobre o ComSvcConfig.exe, confira Como usar a ferramenta de configuração de modelo do serviço COM+.
Defina qualquer configuração de serviço adicional no arquivo de configuração do aplicativo. Para obter mais informações sobre como configurar um componente, consulte Como definir as configurações do serviço COM+.
Interfaces com suporte
Há algumas restrições no tipo de interfaces que podem ser expostas como um serviço Web. Não há suporte para os seguintes tipos de interfaces:
Interfaces que passam referências de objeto como parâmetros – a abordagem de referência de objeto limitada a seguir é descrita na seção Suporte de Referência de Objeto Limitado.
Interfaces que passam tipos que não são compatíveis com as conversões de interoperabilidade com .NET Framework COM.
Interfaces para aplicativos que têm o pool de aplicativos habilitado quando hospedados pelo COM+.
Interfaces de componentes marcados como privados para o aplicativo.
Interfaces de infraestrutura COM+.
Interfaces do aplicativo do sistema.
Interfaces de componentes dos serviços empresariais que não foram adicionados ao cache de assembly global.
Suporte à referência de objeto limitado
Como vários componentes COM+ implantados usam objetos por parâmetros de referência, como retornar um objeto ADO Recordset, a integração COM+ inclui suporte limitado para parâmetros de referência de objeto. O suporte é limitado a objetos que implementam a interface COM do IPersistStream
. Isso inclui objetos do Conjunto de registros do ADO e pode ser implementado para objetos COM específicos do aplicativo.
Para habilitar esse suporte, a ferramenta ComSvcConfig.exe fornece a opção allowreferences que desabilita o parâmetro de assinatura do método regular e verifica se a ferramenta é executada para garantir que os parâmetros de referência do objeto não estejam sendo usados. Além disso, os tipos de objeto que você passa como parâmetros devem ser nomeados e identificados dentro do elemento de configuração <persistableTypes>
que é filho do elemento <comContract>
.
Quando esse recurso é usado, o serviço de integração COM+ usa a interface IPersistStream
para serializar ou desserializar a instância do objeto. Se a instância do objeto não der suporte para IPersistStream
, uma exceção será gerada.
Em um aplicativo cliente, os métodos no objeto PersistStreamTypeWrapper podem ser usados para passar um objeto para um serviço e, da mesma forma, para recuperar um objeto.
Observação
Devido à natureza personalizada e específica da plataforma da abordagem de serialização, isso é mais adequado para uso entre clientes WCF e serviços WCF.
Selecionar o modo de hospedagem
O COM+ expõe os serviços Web em um dos seguintes modos de hospedagem:
Hospedado no COM+
O serviço Web é hospedado dentro do processo de servidor COM+ dedicado do aplicativo (Dllhost.exe). Esse modo exige que o aplicativo seja iniciado explicitamente antes de receber solicitações de serviço Web. As opções COM+ "Executar como um serviço NT" ou "Sair em execução quando ocioso" podem ser usadas para evitar o desligamento ocioso do aplicativo e de seus serviços. Esse modo fornece acesso de serviço Web e DCOM ao aplicativo de servidor.
Hospedado na Web
O serviço Web é hospedado em um processo de trabalho do servidor Web. Esse modo não exige que o COM+ esteja ativo quando a solicitação inicial é recebida. Se o aplicativo não estiver ativo quando essa solicitação for recebida, ele será ativado automaticamente antes de processar a solicitação. Esse modo também fornece acesso de serviço Web e DCOM ao aplicativo de servidor, mas causa um salto de processo para solicitações de serviço Web. Isso normalmente requer que o cliente habilite a representação. No WCF, isso pode ser feito com a propriedade AllowedImpersonationLevel da classe WindowsClientCredential, que é acessada como uma propriedade da classe genérica ChannelFactory<TChannel>, bem como o valor de enumeração Impersonation.
Hospedado na Web em processo
O serviço Web e a lógica do aplicativo COM+ são hospedados dentro do processo de trabalho do servidor Web. Isso fornece ativação automática do modo hospedado pela Web sem causar um salto de processo para solicitações de serviço Web. A desvantagem é que o aplicativo de servidor não pode ser acessado por meio do DCOM.
Considerações de segurança
Assim como outros serviços do WCF, as configurações de segurança do serviço exposto são administradas por meio de configurações para o canal WCF. Configurações de segurança DCOM tradicionais, como as configurações de permissões de todo o computador DCOM, não são impostas. Para impor funções de aplicativo COM+, a autorização de "verificações de acesso no nível do componente" deve ser habilitada para o componente.
O uso de uma associação não protegida pode deixar a comunicação aberta para violação ou divulgação de informações. Para evitar isso, é recomendável que você use uma associação protegida.
Para os modos hospedados pela Web e hospedados pelo COM+, os aplicativos cliente devem permitir que o processo de servidor represente o usuário cliente. Isso pode ser feito em clientes WCF definindo o nível de representação como Impersonation.
Com os Serviços de Informações da Internet (IIS) ou o WAS (Serviço de Ativação de Processo do Windows) usando o transporte HTTP, a ferramenta Httpcfg.exe pode ser usada para reservar um endereço de ponto de extremidade de transporte. Em outras configurações, é importante se proteger contra serviços desonestos que atuam como o serviço pretendido. Para impedir que um serviço desonesto comece no ponto de extremidade desejado, o serviço legítimo pode ser configurado para ser executado como um serviço NT. Isso permite que o serviço legítimo reclame o endereço do ponto de extremidade antes de qualquer serviço não autorizado.
Ao expor um aplicativo COM+ com funções COM+ configuradas como um serviço hospedado pela Web, a "Conta de Processo do IIS de Inicialização" deve ser adicionada a uma das funções do aplicativo. Essa conta, normalmente com o nome IWAM_machinename, deve ser adicionada para habilitar o desligamento limpo de objetos após o uso. A conta não deve receber nenhuma permissão adicional.
Os recursos de reciclagem de processo COM+ não podem ser usados em aplicativos integrados. Se o aplicativo estiver configurado para usar a reciclagem do processo e os componentes estiverem em execução em um processo hospedado com COM+, o serviço não será iniciado. Esse requisito não inclui serviços que usam o modo de processo hospedado pela Web porque as configurações de reciclagem do processo não são aplicadas.