Desenvolvimento - ASP. NET

Customizando o ServiceHost

Quando utilizamos o IIS como host de um serviço WCF, o módulo em conjunto com o handler do WCF (referentes ao ASP.NET pipeline) se encarregam de criar a classe ServiceHost no momento correto, utilizado para servir o tipo que queremos disponibilizar para que os clientes consumam.

por Israel Aéce



Quando utilizamos o IIS como host de um serviço WCF, o módulo em conjunto com o handlerdo WCF (referentes ao ASP.NET pipeline) se encarregam de criar a classe ServiceHost no momento correto, utilizadopara servir o tipo que queremos disponibilizar para que os clientes consumam.

Como a criação deste objeto acontece automaticamente, pode haver cenário onde é necessário fazer um trabalho adicional durante a criação do mesmo e, para isso, podemos criar uma classe que herde diretamente da classe ServiceHost e lá interceptar e, conseqüentemente, customizar o que desejamos:

public class CustomServiceHost : ServiceHost {
publicCustomServiceHost(){
ExecuteCustomAction();
}
}

Só que apenas isso não é o suficiente. Ainda é necessário implementarmos uma factoryque cria a instancia da classe acima. Dentro do WCF existe a classe ServiceHostFactoryBase que é encarregada de criar instancias das classes ServiceHost para o módulo. Neste momento, quando herdamos desta classe base, devemos sobrescrever o método CreateServiceHost que, no nosso cenário, deverá retornar uma instancia de CustomServiceHost. O exemplo abaixo demonstra esse processo:

public class CustomServiceHostFactory : ServiceHostFactoryBase {
public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses){
return new CustomServiceHost(baseAddresses);
}
}

Finalmente, o código acima por si só não trabalha. Ainda é necessário especificarmos a factory que será utilizada para a geração do hoste, para isso, utilizamos o atributo Factory da diretiva @ServiceHost do arquivo *.svc onde atribuímos o tipo (Type)da a factory recém criada. O trecho do código abaixo exibe o arquivo *.svc com a factory que customizamos acimajá definida:

<%@ServiceHost language="C#" Factory="CustomServiceHostFactory" %>
Israel Aéce

Israel Aéce - Especialista em tecnologias de desenvolvimento Microsoft, atua como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. Como instrutor Microsoft, leciona sobre o desenvolvimento de aplicações .NET. É palestrante em diversos eventos Microsoft no Brasil e autor de diversos artigos que podem ser lidos a partir de seu site http://www.israelaece.com/. Possui as seguintes credenciais: MVP (Connected System Developer), MCP, MCAD, MCTS (Web, Windows, Distributed, ASP.NET 3.5, ADO.NET 3.5, Windows Forms 3.5 e WCF), MCPD (Web, Windows, Enterprise, ASP.NET 3.5 e Windows 3.5) e MCT.