Condividi tramite


Channel factory

In questo esempio viene illustrato in che modo un'applicazione client può creare un canale con la classe ChannelFactory anziché un client generato. L'esempio è basato su Esempio della guida introduttiva, che implementa un servizio di 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 per creare un canale a un endpoint del servizio. In genere, per creare un canale a un endpoint del servizio si genera un tipo client con Service Model Metadata Utility Tool (Svcutil.exe) e si crea un'istanza del tipo generato. È anche possibile creare un canale utilizzando la classe ChannelFactory, come illustrato in questo esempio. Il servizio creato dal codice di esempio seguente è identico al servizio in Esempio della guida introduttiva.

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

Nota

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 avere eseguito 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 Generazione degli esempi Windows Communication Foundation. 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 su una configurazione con 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

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

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

Send comments about this topic to Microsoft.
© 2007 Microsoft Corporation. All rights reserved.