Asynchrone Datenübertragung WCF (HTTP Binding)
-
HAllo Ihr,
ich habe einen WCF Service, mit dem ich Daten von A nach B übetrage.
Dabei sollen die Daten (Bulkweise) von A nach B übetragen werden, d.h.
Ich starte die Übertragung mit einem OperationContract, und polle die
Daten mit einem weiteren OperationContract ab, bis alles daten da sind,
mit einem dritten OperationContract beende ich die die übertagung.Auf Serverseite hab ich so einen Thread in dem die Daten aufbereite und
in einem queue bereistelle, und auf Clientseite hol ich mir so die Daten
Stück für Stück (auch in einem Thread) ab.So die Theorie und Praksis:)
Nun frage ich mich ob ich dies nich "schöner" und "eleganter" machen könnten.
da ich HTTP Binding nutzen muss, is wohl polling die einzigste möglihckeit
oder?Grüße
-
WCF kann doch asynchron arbeiten, da brauchst du keinen Thread der irgendwas macht. Du musst beim referenzieren des Services einfach nur in der Konfiguration angeben, das der Service asynchron arbeiten soll, das ist alles.
-
Hmm, und wie soll das gehen!? Wenn ich die Daten in stückchen rüberholen will!? ich muss doch trozdem pollen.....
-
Wenn du über den asynchronen WCF Service eine Anfrage stellst, läuft der Rest deines Codes einfach weiter. Irgendwann, wenn die Anfrage dann fertig ist kommt eine Antwort zurück (weil asynchron). Und wenn das der Fall ist, sind auch deine Daten komplett übertragen. Ergo musst du über den WCF-Service einfach solange deine Daten sammeln und senden bis du fertig bist. Der Service meldet sich dann schon, wenn er fertig ist (weil du dich an dem Event von EndInvoke() dranhängen kannst).
Du solltest dich unbedingt intensiver mit WCF beschäftigen, wenn du es einsetzen möchtest/musst/willst.
-
Das is mir schon klar, dass ich die Mehtode Asynchron via Begin/End Invoke nen asychronismus habe, aber ich will während die Abfrage im Gange ist , den Fortschritt der Übertragung haben.. bzw. die daten step-by-step empfangen... glaube wir sprehen aneinander vorbei!?
-
Wieso willst du die Daten denn überhaupt in "Stückchen" laden. Was versprichst du dir davon?
-
ich kann auf der client seite die daten schon verarbeiten, darstellen, tranformieren etc. bevor ich alle drüben haben...zudem hab ich die möglichkeit und kann den transfer abbrechen währen der schon im gange ist ! sonst muss man "ewig" warten bis alle da sind! es handelt sich schon um 200MB daten oder so.. speicherauslastung unten halten.. etc.
momentan initiere ich die abfrage, und hole sie gepollt ab.. dachte das ging ectl. eleganter.. es gibrt auch die möglichkeit daten zu streamen, aber weiß nich ob das so gut ist...
grüße
-
Wenn das so ist, solltest du Streamen. Mit WCF zu pollen, gerade bei solchen Datenmengen, ist da zu viel, es ensteht ja nochmal extra Traffic.
Damit du über WCF streamen kannst, musst du ein Binding haben, das auch die Fähigkeit besitzt zu Streamen. Dafür muss du den transferMode auf Streamed setzen.
Vielleicht auch noch interessant in dem Zusammenhang:
http://lutzit-consulting.ch/2011/05/programmierung-von-streaming-services-mit-wcf-und-silverlight/
-
Oh danke, vielen danke, das schau ich mir mal an:)
Ja hoffe das streamen geht auch mit nem HTTP Binding..