Fábrica do Canal
O exemplo ChannelFactory demonstra como um aplicativo cliente pode criar um canal com a ChannelFactory classe em vez de um cliente gerado. Este exemplo é baseado na Introdução que implementa um serviço de calculadora.
Nota
O procedimento de configuração e as instruções de compilação para este exemplo estão localizados no final deste tópico.
Este exemplo usa a ChannelFactory<TChannel> classe 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 ServiceModel Metadata Utility Tool (Svcutil.exe) e cria uma instância do tipo gerado. Você também pode criar um canal usando a ChannelFactory<TChannel> classe, como demonstrado neste exemplo. O serviço criado pelo código de exemplo a seguir é idêntico ao serviço em 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 este exemplo em um cenário entre máquinas, deverá substituir "localhost" no código anterior pelo nome totalmente qualificado da máquina 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 em código.
Uma vez que o canal é criado, as operações de serviço podem ser invocadas como 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 deve primeiro ser convertido em uma IClientChannel interface. Isso ocorre porque o canal como gerado é declarado no aplicativo cliente usando a ICalculator
interface, que tem métodos como Add
e Subtract
mas não Close
. O Close
método tem origem na ICommunicationObject interface.
// 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
Certifique-se de ter executado o procedimento de instalação única para os exemplos do Windows Communication Foundation.
Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation. Observe que este exemplo não habilita a publicação de metadados. Você deve primeiro habilitar a publicação de metadados para este exemplo para regenerar o tipo de cliente.
Para executar o exemplo em uma configuração de máquina única ou cruzada, siga as instruções em Executando os exemplos do Windows Communication Foundation.
Para executar a máquina cruzada de amostra
Substitua "localhost" no código a seguir pelo nome totalmente qualificado da máquina que está executando o serviço.
EndpointAddress address = new EndpointAddress("http://localhost/servicemodelsamples/service.svc");