O WCF permite a configuração de um serviço de forma declarativa e imperativa, assim como já falei aqui. Quando optamos pela forma declarativa, todas as configurações do serviço/cliente serão feitas em um arquivo de configuração (App.config/Web.config), e com isso, sempre temos que referenciar o serviço e o contrato com o seu nome completo, ou seja, incluindo o namespace até eles.
Para facilitar isso, temos a propriedade ConfigurationName, exposta através dos atributos ServiceBehaviorAttribute e ServiceContractAttribute, onde podemos definir um “alias” para o serviço e o contrato, respectivamente. Com isso, evitamos especificar o nome completo até os tipos. O código abaixo ilustra a utilização dessa propriedade nos dois atributos:
[ServiceContract(ConfigurationName = “MeuContrato”)]
public interface IContrato
{
//…
}
[ServiceBehavior(ConfigurationName = “MeuServico”)]
public class Servico : IContrato
{
//…
}
E, se repararmos no arquivo de configuração agora, teremos:
<services>
<service name=”MeuServico”>
<host>
<baseAddresses>
<add baseAddress=”http://localhost:9383″/>
</baseAddresses>
</host>
<endpoint address=”srv” binding=”basicHttpBinding” contract=”MeuContrato” />
</service>
</services>
É importante dizer que isso não interfere no nome do serviço e do contrato que será exposto através do documento WSDL. Essas configurações são apenas características locais dos arquivos de configuração do serviço ou do cliente.