2011-09-22 9 views
16

Mam zamiar przekazać MemoryStream poprzez strumieniowanie WCF, ale wydaje się nie działa, ale kiedy nieznacznie zmienić kod, aby przejść zamiast FileStream, działa. W rzeczywistości moim celem jest przekazywanie dużej kolekcji obiektów biznesowych (serializowalnych). Używam basicHttpBinding. Twoja sugestia byłaby bardzo cenna!Jak przesłać MemoryStream przez strumieniowanie WCF

Edytowane: Symptom problemu jest to, że przychodzący strumień jest pusty. Nie ma błędu ani wyjątku.

+0

a jeśli jest to w przypadku braku wyjątek musi zostały rzucone. Gdzie jesteś w stanie go złapać? Jaki był komunikat o błędzie? Czy wiadomość daje ci jakąkolwiek wskazówkę, co się dzieje? –

+0

Wielkie dzięki za odpowiedzi. Wysłałem to pytanie z kaprysu, ponieważ doprowadzało mnie to do rozpaczy przez kilka dni. –

Odpowiedz

51

Nie podajecie wielu szczegółów, ale jestem prawie pewien, że wiem, o co chodzi, ponieważ widziałem, jak wiele się dzieje.

Jeśli napiszesz coś do MemoryStream w celu zwrócenia go w wyniku operacji usługi WCF, musisz ręcznie zresetować strumień do jego początku przed zwróceniem go. WCF odczyta tylko strumień z tego aktualnej pozycji, dlatego zwróci pusty strumień, jeśli ta pozycja nie została zresetowana.

To wyjaśniałoby przynajmniej problem, który opisujesz. Mam nadzieję że to pomoże.

Oto przykładowy kod:

[OperationContract] 
    public Stream GetSomeData() 
    { 
     var stream = new MemoryStream(); 
     using(var file = File.OpenRead("path")) 
     { 
      // write something to the stream: 
      file.CopyTo(stream);   
      // here, the MemoryStream is positioned at its end 
     } 
     // This is the crucial part: 
     stream.Position = 0L; 
     return stream; 
    } 
+4

Wielkie dzięki. Dosłownie oszczędzasz dzień .. –

Powiązane problemy