Procedura: chiamare le operazioni in modo asincrono tramite una channel factory
In questo argomento viene illustrato in che modo un client può accedere a un'operazione del servizio in modalità asincrona quando si utilizza un'applicazione client basata su ChannelFactory. Quando si utilizza un oggetto System.ServiceModel.ClientBase per richiamare un servizio, è possibile utilizzare il modello di chiamata asincrono basato su eventi. Per ulteriori informazioni, vedere Procedura: chiamare operazioni del servizio WCF in modo asincrono. Per ulteriori informazioni sul modello di chiamata asincrono basato su eventi, vedere Multithreaded Programming with the Event-based Asynchronous Pattern
Il servizio in questo argomento implementa l'interfaccia ICalculator
. Il client può chiamare in modo asincrono le operazioni su tale interfaccia, il che significa che le operazioni come Add
vengono suddivise in due metodi, BeginAdd
ed EndAdd
, il primo dei quali avvia la chiamata e il secondo recupera il risultato al termine dell'operazione. Per un esempio che illustra come implementare in modo asincrono un'operazione in un servizio, vedere Procedura: implementare un'operazione del servizio asincrona. Per informazioni dettagliate sulle operazioni sincrone e asincrone, vedere Operazioni sincrone e asincrone.
Procedura
Per chiamare operazioni del servizio WCF in modo asincrono
Eseguire lo ServiceModel Metadata Utility Tool (Svcutil.exe) con l'opzione /async come illustrato nel comando seguente.
svcutil /n:http://Microsoft.ServiceModel.Samples,Microsoft.ServiceModel.Samples https://localhost:8000/servicemodelsamples/service/mex /a
Questo genera una versione client asincrona del contratto di servizio per l'operazione.
Creare una funzione di callback da chiamare al temine dell'operazione asincrona, come illustrato nel codice di esempio seguente.
Per accedere in modo asincrono a un'operazione del servizio, creare il client, chiamare
Begin[Operation]
(ad esempio,BeginAdd
) e specificare una funzione di callback, come illustrato nel codice di esempio seguente.Quando la funzione di callback viene eseguita, il client chiama
End<operation>
(ad esempio,EndAdd
) per recuperare il risultato.
Esempio
Il servizio utilizzato con il codice client della procedura precedente implementa l'interfaccia ICalculator
come illustrato nel codice seguente. Sul lato del servizio, le operazioni Add
e Subtract
del contratto vengono richiamate in modo sincrono dal runtime Windows Communication Foundation (WCF), anche se i passaggi client precedenti vengono richiamati in modo asincrono sul client. Le operazioni Multiply
e Divide
vengono utilizzate per richiamare il servizio in modo asincrono sul lato del servizio, anche se il client le richiama in modo sincrono. In questo esempio la proprietà AsyncPattern viene impostata su true. Tale impostazione della proprietà, in combinazione con l'implementazione del modello asincrono di .NET Framework, consente al runtime di richiamare in modo asincrono l'operazione.