Compartilhar via


Fábrica de canais

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

Observação

O procedimento de instalação e as instruções de build desse exemplo estão 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 classe ChannelFactory<TChannel>, conforme demonstrado neste exemplo. O serviço criado pelo código de exemplo a seguir é idêntico ao serviço descrito na Introdução.

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 esse exemplo em um cenário de vários computadores, precisará 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, ou seja, isso precisa 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 gerado é declarado no aplicativo cliente usando a interface ICalculator, que tem métodos como Add e Subtract, mas não Close. O método Close se origina da interface ICommunicationObject.

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

Quando você executa o exemplo, as solicitações de operação e as respostas 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 única para os exemplos do Windows Communication Foundation.

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

  3. Para executar o exemplo em uma configuração de computador único ou de vários computadores, siga as instruções em Como executar 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");