2014-11-29 5 views
5

मैं एक HTTP सर्वर (OWINHost द्वारा होस्ट किया गया) में एक स्ट्रीम पोस्ट करना चाहता हूं, नीचे कोड स्निपेट देखें। जब मैं स्ट्रिंग सामग्री के साथ एक स्ट्रिंग स्थानांतरित करता हूं तो यह ठीक काम करता है। हालांकि अगर मैं StreamContent के साथ मेमोरीस्ट्रीम स्थानांतरित करना चाहता हूं, तो सर्वर की तरफ प्राप्त स्ट्रीम खाली है (मैंने सत्यापित किया है कि मेमोरीस्ट्रीम परीक्षण प्रयोजनों के लिए क्लाइंट साइड पर इसे deserializing द्वारा सही है)। मैं क्या गलत कर रहा हूँ?HttpRequestMessage/StreamContent, सर्वर पक्ष पर खाली स्ट्रीम

क्लाइंट-साइड:

... 
var request = new HttpRequestMessage(HttpMethod.Post, Configuration.ServiceBaseAddress); 

// this works fine! 
//request.Content = new StringContent("This is a test!!"); 

request.Content = new StreamContent(stream); 
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 

HttpResponseMessage response = await client.SendAsync(request); 
... 

सर्वर साइड:

public class Startup { 
    public void Configuration(IAppBuilder app) { 
    app.Run(async context => 
    { 
     var stream = new MemoryStream(); 
     await context.Request.Body.CopyToAsync(stream); 
     stream.Seek(0, SeekOrigin.Begin); 

     // this works fine when I send StringContent 
     //StreamReader reader = new StreamReader(stream); 
     //String str = reader.ReadToEnd(); 

     // when I send StreamContent the stream object is empty 
     IFormatter formatter = new BinaryFormatter(); 
     ServiceRequest requestTest = (ServiceRequest)formatter.Deserialize(stream); 

     context.Response.ContentType = "text/plain"; 
     await context.Response.WriteAsync("Hello World!"); 
    }); 
    } 
} 
+0

क्या आपने पहले ही स्ट्रीम में कुछ लिखा है? मुझे नहीं लगता कि पहले कोड खंड में हो रहा है, लेकिन हो सकता है कि आप इसे पहले से ही करें। बस एक चेक – Sjips

+0

हां मैंने स्ट्रीम में एक ऑब्जेक्ट लिखा था। जैसे मैंने परीक्षण उद्देश्यों के लिए कहा था, मैंने क्लाइंट-साइड पर स्ट्रीम को deserialized और ऑब्जेक्ट बहाल किया गया था। मैंने स्पष्टता के लिए कोड छोड़ा। – matt77

+0

मैं विंडोज 7 और माइक्रोसॉफ्ट.ऑविन और ओविनहोस्ट 3.0 का उपयोग करता हूं, यह विजुअल स्टूडियो एक्सप्रेस 2013 – matt77

उत्तर

3

मैं शामिल करना भूल:

stream.Seek(0, SeekOrigin.Begin); 
क्लाइंट-साइड पर

संबंधित मुद्दे