Channel Factory

Nell’esempio ChannelFactory viene illustrato in che modo un'applicazione client può creare un canale con la classe ChannelFactory anziché un client generato. Questo esempio si basa sull'Introduzione che implementa un servizio calcolatrice.

Nota

La procedura di installazione e le istruzioni di compilazione per questo esempio si trovano alla fine di questo argomento.

In questo esempio viene utilizzata la classe ChannelFactory<TChannel> per creare un canale a un endpoint del servizio. In genere, per creare un canale a un endpoint di servizio, si genera un tipo di client con lo strumento ServiceModel Metadata Utility Tool (Svcutil.exe) e si crea un'istanza del tipo generato. È anche possibile creare un canale utilizzando la classe ChannelFactory<TChannel>, come illustrato in questo esempio. Il servizio creato dal codice di esempio seguente è identico al servizio nell'Introduzione.

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 si esegue questo esempio in uno scenario a più computer, è necessario sostituire "localhost" nel codice precedente con il nome completo del computer che sta eseguendo il servizio. In questo esempio non viene utilizzata la configurazione per impostare l'indirizzo dell'endpoint, pertanto questa operazione deve essere eseguita nel codice.

Quando il canale è stato creato, le operazioni del servizio possono essere richiamate in modo analogo a un client generato.

// 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);

Per chiudere il canale, è necessario prima eseguirne il cast a un'interfaccia IClientChannel. Ciò è necessario in quanto il canale generato viene dichiarato nell'applicazione client utilizzando l'interfaccia ICalculator che dispone di metodi quali Add e Subtract ma non Close. Il metodo Close ha origine sull'interfaccia ICommunicationObject.

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

Quando si esegue l'esempio, le richieste e le risposte dell'operazione vengono visualizzate nella finestra della console client. Premere INVIO nella finestra del client per arrestare l'applicazione client.

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.

Per impostare, compilare ed eseguire l'esempio

  1. Assicurarsi di aver eseguito la Procedura di installazione singola per gli esempi di Windows Communication Foundation.

  2. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples. Si noti che in questo esempio non viene abilitata la pubblicazione di metadati. Per rigenerare il tipo client, è necessario innanzitutto abilitare la pubblicazione dei metadati per questo esempio.

  3. Per eseguire l'esempio in un solo computer o tra computer diversi, seguire le istruzioni in Esecuzione degli esempi di Windows Communication Foundation.

Per eseguire l'esempio su più computer

Sostituire "localhost" nel codice seguente con il nome completo del computer che sta eseguendo il servizio.

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