2014-11-29 6 views
5

ich einen Strom an einen HTTP-Server (gehostet von OWINHost) zu stellen, Code-Schnipsel unten. Es funktioniert gut, wenn ich einen String mit StringContent übertrage. Allerdings, wenn ich ein Memorystream mit StreamContent übertragen möchten, erhielt der Strom auf der Serverseite ist leer (I Nachweis erbracht, dass die Memory es zu Testzwecken auf Client-Seite durch Deserialisieren korrekt ist). Was mache ich falsch?HttpRequestMessage/StreamContent, leeren Stream auf Server-Seite

Client-side:

... 
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); 
... 

Server-Seite:

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

Haben Sie bereits etwas in den Stream geschrieben? Ich sehe das nicht im ersten Codefragment, aber vielleicht machst du es schon. Nur ein Scheck. – Sjips

+0

Ja, ich habe ein Objekt in den Stream geschrieben. Wie ich zu Testzwecken gesagt habe, habe ich den Stream auf der Client-Seite deserialisiert und das Objekt wurde wiederhergestellt. Ich habe den Code aus Gründen der Übersichtlichkeit weggelassen. – matt77

+0

verwende ich Windows 7 und Microsoft.Owin und OwinHost 3.0, es läuft im Debug-Modus in Visual Studio Express 2013 – matt77

Antwort

3

Ich habe vergessen zu umfassen:

stream.Seek(0, SeekOrigin.Begin); 

auf der Client-Seite.

Verwandte Themen