2012-11-18 9 views
12

Abbiamo un robusto client WCF costruito nel 2008 su .NET 3.5 (ora ricompilato in .NET 4.0) che comunica con il nostro servizio WCF tramite il binding net.tcp. Il client robusto utilizza ChannelFactory <IOurServiceInterface>() per generare un proxy di servizio, tramite il quale attualmente effettuiamo chiamate sincrone al servizio. Otteniamo risultati da ogni chiamata; non abbiamo chiamate di sola andata.Come applicare Task Async Pattern e ChannelFactory di WCF <TChannel>?

Stiamo migrando a .NET 4.5/C# 5 e vorremmo rendere il client asincrono usando async/await/TAP. Il modo migliore per farlo in un modo che si traduca in codice pulito e buone prestazioni di runtime?

(Ho esaminato la documentazione MS su questo argomento, ma si parla sempre di eseguire svcutil.Non usiamo svcutil, usiamo direttamente ChannelFactory.Inoltre: documentazione MS per chiamare le operazioni in modo asincrono usando una factory di canale sotto. NET 4.5 sono invariate rispetto .NET 3.0 giorni. Sembra ChannelFactory non ha abbracciato il nuovo asincronia.)

risposta

6

puoi avvolgere APM esistente (Begin*/End*) endpoint in TAP-ready Task s utilizzando TaskFactory.FromAsync.

È possibile trovare il mio Async WCF Today and Tomorrow post utile, che mostra come utilizzare TAP con il pre-VS2012 svcutil.

+0

Grazie Stephen. Dopo aver cercato informazioni sulla tua risposta, e dopo aver letto il tuo post, penso che questo sia il meglio che si possa fare. Sono sorpreso che ChannelFactory in questo giorno ti aspetti ancora di utilizzare il pattern APM. –

3

Hai visto this? Ho fatto un esempio di attesa [OperationContract] restituendo Task<TResponse>.

+0

Grazie; Lo controllerò. –