2012-11-18 9 views
12

Wir haben einen robusten WCF-Client, der im Jahr 2008 unter .NET 3.5 (jetzt unter .NET 4.0 neu kompiliert) erstellt wurde und über die Bindung net.tcp mit unserem eigenen WCF-Dienst kommuniziert. Der robuste Client verwendet ChannelFactory <IOurServiceInterface>(), um einen Service-Proxy zu generieren, über den wir derzeit synchrone Aufrufe an den Service tätigen. Wir erhalten Ergebnisse von jedem Anruf zurück; Wir haben keine Einbahnstraßen.Wie Task Async Pattern und WCF's ChannelFactory <TChannel> anwenden?

Wir migrieren zu .NET 4.5/C# 5 und möchten den Client mit async/await/TAP asynchron machen. Wie kann dies am besten so durchgeführt werden, dass sauberer Code und eine gute Laufzeitleistung erzielt werden?

(Ich habe MS-Dokumentation zu diesem Thema angeschaut, aber es spricht immer über das Ausführen von Svcutil. Wir verwenden nicht Svcutil; wir verwenden ChannelFactory direkt. Auch: MS-Dokumentation zum asynchronen Aufruf von Operationen mit einer Kanalfactory unter. NET 4.5 unverändert sind seit 3,0 Tage .NET. Scheint Channel hat die neue Asynchronität umarmte.)

Antwort

6

Sie bestehende APM wickeln kann (Begin*/End*) Endpunkte in TAP-ready Task s TaskFactory.FromAsync verwenden.

Sie können meine Async WCF Today and Tomorrow post hilfreich finden, die zeigt, wie man TAP mit der pre-VS2012 SVCutil verwendet.

+0

Danke Stephen. Nach der Suche nach Informationen basierend auf Ihrer Antwort und nach dem Lesen Ihres Beitrags, denke ich, dass dies das Beste ist, was getan werden kann. Ich bin überrascht, dass ChannelFactory in diesen Tagen immer noch erwartet, dass Sie das APM-Muster verwenden. –

3

Haben Sie this gesehen? Ich machte ein Beispiel für eine erwartete [OperationContract] Rückgabe Task<TResponse>.

+0

Danke; Ich werde das überprüfen. –