Ich habe einen WCF-Dienst, der große (10 bis 20 Millionen) Objekte aus der Datenbank lesen muss.Streamen einer unbestimmten Anzahl von Objekten über WCF
Was ich gerne tun würde, ist, dass der Client einen Stream öffnet und der Server Daten aus der Datenbank pushen lässt, während er liest.
So könnte der Client einfach in einer Schleife deserializing Nachrichten sitzen, bis es die EOF-Nachricht vom Server erhält, im Stil der Twitter Streaming API, aber mit einer endlichen Menge. Das Problem, das ich habe, ist, wie man den Stream zurückgibt und dann weiter schreibt. Ist das mit WCF möglich?
WS Dual Http erlaubt überhaupt kein Streaming. Aber im Allgemeinen hast du recht. Wahrscheinlich ist die einzige Möglichkeit, solche Kommunikation in WCF zu simulieren, eine bidirektionale gestreamte Net.TCP-Verbindung zu öffnen (nicht sicher, ob diese Kombination möglich ist). Anstatt einen einzelnen Stream zurückzugeben, verwenden Sie den Client-Callback, um den Datensatz zu senden. –
Ich habe nicht gesagt, dass Streaming erlaubt ist. Ich versuche zu sagen, dass es wahrscheinlich eine bessere Option als Streaming ist. Sie können in WCF streamen, aber E/A für andere ankommende Anfragen blockieren. Es ist keine gute Wahl, wenn es um die Skalierung geht. Darüber hinaus möchten die meisten in Serialisierer integrierten die gesamte Nachricht downloaden, bevor sie den Inhalt deserialisieren. –
Wäre es besser, wenn ich nur einen HttpHandler verwende und so in den Stream schreibe? Ich muss über HTTP gehen, da dies ein externer Webservice ist. Habe einen Blick auf deine Lösung geworfen Matt und es sieht gut aus, aber ich habe vergessen zu erwähnen, dass wir vielleicht Leute benutzen, die das von außerhalb der WCF benutzen, also würde ich annehmen, dass ich die HttpHandler-Route gehen müsste? Ich bin nicht unbedingt an die WCF gebunden, ich frage mich nur, ob das möglich ist. Wenn es also andere bessere Möglichkeiten gibt, bin ich für sie offen. Danke, dass Sie sich die Zeit genommen haben, meine Frage zu beantworten. –