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
Verifique se você executou o Procedimento de instalação única para os exemplos do Windows Communication Foundation.
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.
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");