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.

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 { 
    public CustomServiceHost(){
        ExecuteCustomAction();
    }
}

Só que apenas isso não é o suficiente. Ainda é necessário implementarmos uma factory que 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 host e, 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 acima já definida:

<%@ServiceHost language=”C#” Factory=”CustomServiceHostFactory” %>

Anúncios

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s