Herança de Interfaces em contratos de serviço


Assim como as classes, as interfaces também podem fazer uso da herança para agregar funcionalidades e características de outras interfaces, e quando implementamos uma interface que herda de outra, todos os membros envolvidos na hierarquia deverão ser definidas na classe.

Como sabemos, são as interfaces que definem os contratos de serviços WCF, e podemos fazer uso de herança de interfaces para refinar o acesso à operações, conseguindo filtrar o que será exposto através de um determinado endpoint. Considere as interfaces a seguir:

[ServiceContract]
interface IContrato1
{
    [OperationContract]
    string Metodo1(string value);
}

[ServiceContract]
interface IContrato2 : IContrato1
{
    [OperationContract]
    string Metodo2(string value);
}

Note que a interface IContrato2 herda da interface IContrato1, o que obrigará a classe (serviço) que implementar a interface IContrato2, também definir a implementação para o Metodo1, definido na interface IContrato1. Como na criação do endpoint somos obrigados a informar um contrato, podemos permitir que internamente o consumidor veja ambos os métodos, pois estamos expondo o contrato IContrato2, enquanto externamente, o consumidor somente irá visualizar as operações expostas pelo contrato IContrato1, que neste caso é o método Metodo1.

host.AddServiceEndpoint(typeof(IContrato1), new BasicHttpBinding(), “contratoExterno”);
host.AddServiceEndpoint(typeof(IContrato2), new NetTcpBinding(), “contratoInterno”);

O fato de existir a herança, permitirá ao consumidor interno visualizar as operações do contrato IContrato2 e também as operações expostas pelo contrato IContrato1, dando a ele todas as funcionalidades que foram fornecidas pela herança dos contratos (interfaces).

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