2011-09-22 51 views
16

Tôi đang lên kế hoạch để vượt qua MemoryStream qua WCF Streaming nhưng có vẻ như không hoạt động nhưng khi tôi thay đổi một chút mã để vượt qua FileStream thay vào đó, nó đang làm việc. Trong thực tế, mục đích của tôi là để vượt qua bộ sưu tập lớn các đối tượng kinh doanh (serializable). Tôi đang sử dụng basicHttpBinding. Đề nghị của bạn sẽ được nhiều đánh giá cao!Làm thế nào để chuyển MemoryStream qua WCF Streaming

Đã chỉnh sửa: Các triệu chứng của vấn đề là luồng đến trống. Không có lỗi và ngoại lệ.

+0

Và nếu nó thất bại, một ngoại lệ phải được ném. Bạn có thể bắt nó ở đâu? Thông báo lỗi là gì? Tin nhắn có cho bạn manh mối về những gì đang xảy ra không? –

+0

Cảm ơn rất nhiều câu trả lời của bạn. Tôi đã đăng câu hỏi này vào một ý thích vì nó đã khiến tôi thất vọng trong một vài ngày. –

Trả lời

51

Bạn hiện không cung cấp nhiều chi tiết, tuy nhiên, tôi gần như chắc chắn rằng tôi biết vấn đề là gì khi tôi thấy điều đó xảy ra rất nhiều.

Nếu bạn viết điều gì đó vào MemoryStream để trả lại kết quả của một thao tác dịch vụ WCF, bạn cần phải đặt lại luồng theo cách thủ công về đầu của nó trước khi trả lại. WCF sẽ chỉ đọc luồng từ vị trí hiện tại, do đó sẽ trả lại luồng trống nếu vị trí đó chưa được đặt lại.

Điều đó ít nhất sẽ giải thích được vấn đề bạn đang mô tả. Hi vọng điêu nay co ich.

Dưới đây một số mẫu mã:

[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

Cảm ơn rất nhiều .. Bạn có nghĩa là tiết kiệm trong ngày .. –

Các vấn đề liên quan