WCF-und streaming-Anfragen und-Antworten

Ist es richtig, dass in WCF, ich kann nicht von einem service schreiben zu einem Bach, der vom client empfangen wurden?

Streaming wird unterstützt von der WCF für Anforderungen, Antworten oder beides.
Das möchte ich unterstützen ein Szenario, in dem der Daten-generator (entweder den client im Falle von Streaming-Anfrage, oder den server im Falle von Streaming-Antwort Schreiben können, der auf dem stream. Wird diese unterstützt?

Die Analogie ist die Antwort.Ausgabestrom von einem ASP.NET Anfrage. In ASPNET, jede Seite aufrufen kann Schreiben auf den Ausgabe-stream, und der Inhalt wird vom client empfangen. Kann ich etwas tun, ähnlich wie in einer WCF-service - aufrufen Schreiben auf einen stream, der vom client empfangen wurden?

Lassen Sie mich erklären, mit einem WCF-illustration. Das einfachste Beispiel für Streaming in WCF ist der service-Rücksendung eines FileStream auf einen client. Dies ist einer Streaming-Reaktion. Der server-code, um dies zu implementieren, ist wie folgt:

[ServiceContract]
public interface IStreamService
{
    [OperationContract]
    Stream GetData(string fileName);
}
public class StreamService : IStreamService
{
    public Stream GetData(string filename)
    {
        return new FileStream(filename, FileMode.Open)
    }
}

- Und der client-code ist so:

StreamDemo.StreamServiceClient client = 
    new WcfStreamDemoClient.StreamDemo.StreamServiceClient();
Stream str = client.GetData(@"c:\path\on\server\myfile.dat");
do {
  b = str.ReadByte(); //read next byte from stream
  ...
} while (b != -1);

(Beispiel entnommen aus http://blog.joachim.at/?p=33)

Klar, oder? Gibt der server den Stream an den client, und der client ruft darauf zu Lesen.

Ist es möglich, den client an einen Bach, und dem server aufrufen auf ihm Schreiben?

In anderen Worten, anstatt ein pull-Modell - wo zieht der client Daten vom server - es ist ein push-Modell, bei dem der client stellt die "sink" - Strom und der server schreibt in Sie. Der server-seitige code könnte ungefähr so Aussehen:

[ServiceContract]
public interface IStreamWriterService
{
    [OperationContract]
    void SendData(Stream clientProvidedWritableStream);
}
public class DataService : IStreamWriterService
{
    public void GetData(Stream s)
    {
        do {
          byte[] chunk = GetNextChunk();
          s.Write(chunk,0, chunk.Length);
        } while (chunk.Length > 0); 
    }
}

Ist das möglich in der WCF ist, und wenn ja, wie? Was sind die config-Einstellungen, die erforderlich sind für die Bindung, interface, etc? Was ist Terminologie?

Vielleicht ist es nur Arbeit? (Ich habe es nicht ausprobiert)

Dank.

InformationsquelleAutor Cheeso | 2010-04-28
Schreibe einen Kommentar