Compartilhar via


Fábrica de canais

O exemplo ChannelFactory demonstra como um aplicativo cliente pode criar um canal com a ChannelFactory classe em vez de um cliente gerado. Este exemplo baseia-se no Guia de Introdução que implementa um serviço de calculadora.

Observação

O procedimento de instalação e as instruções de build para este exemplo estão localizados no final deste tópico.

Este exemplo usa a classe ChannelFactory<TChannel> para criar um canal para um ponto de extremidade de serviço. Normalmente, para criar um canal para um ponto de extremidade de serviço, você gera um tipo de cliente com a Ferramenta de Utilitário de Metadados do ServiceModel (Svcutil.exe) e cria uma instância do tipo gerado. Você também pode criar um canal usando a ChannelFactory<TChannel> classe, conforme demonstrado neste exemplo. O serviço criado pelo código de exemplo a seguir é idêntico ao serviço na seção Getting Started.

EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");
WSHttpBinding binding = new WSHttpBinding();
ChannelFactory<ICalculator> factory = new
                    ChannelFactory<ICalculator>(binding, address);
ICalculator channel = factory.CreateChannel();

Importante

Se você estiver executando este exemplo em um cenário entre máquinas, deverá substituir "localhost" no código anterior pelo nome totalmente qualificado do computador que está executando o serviço. Este exemplo não usa a configuração para definir o endereço do ponto de extremidade, portanto, isso deve ser feito no código.

Depois que o canal é criado, as operações de serviço podem ser invocadas da mesma forma que com um cliente gerado.

// Call the Add service operation.
double value1 = 100.00D;
double value2 = 15.99D;
double result = channel.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

Para fechar o canal, ele precisa primeiro ser convertido em uma interface IClientChannel. Isso ocorre porque o canal como gerado é declarado no aplicativo cliente usando a ICalculator interface, que tem métodos como Add e Subtract não Close. O Close método é originado na ICommunicationObject interface.

// Close the channel.
 ((IClientChannel)client).Close();

Quando você executa o exemplo, as solicitações e respostas da operação são exibidas na janela do console do cliente. Pressione ENTER na janela do cliente para desligar o aplicativo cliente.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Para configurar, compilar e executar o exemplo

  1. Verifique se você executou o Procedimento de instalação avulsa dos exemplos do Windows Communication Foundation.

  2. Para compilar a edição .NET do C# ou do Visual Basic da solução, siga as instruções contidas em Como Compilar as Amostras do Windows Communication Foundation. Observe que este exemplo não habilita a publicação de metadados. Primeiro, você deve habilitar a publicação de metadados para este exemplo para regenerar o tipo de cliente.

  3. Para executar o exemplo em uma configuração única ou entre máquinas, siga as instruções em Executando os exemplos do Windows Communication Foundation.

Para executar o exemplo em vários computadores

Substitua "localhost" no código a seguir pelo nome totalmente qualificado do computador que está executando o serviço.

EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");