2016-09-06 2 views
0

Ich habe einen Web-API-Dienst, der eine Datei zurück auf den WinForm Client sendet, und ich mache es wie so:Wann schließt ein Dampf nach dem Senden als HttpResponseMessage.Content?

  var fileResponse = new HttpResponseMessage(HttpStatusCode.OK); 
      fileResponse.Content = new StreamContent(zipStream); 
      fileResponse.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
      return fileResponse; 

Jetzt bemerkte ich, dass ich den Dampf (zipStream in diesem Fall) nicht schließen kann, weil der Inhalt nicht ordnungsgemäß befüllt werden, da der StreamContent den Stream als Referenz verwendet.

Jetzt ist meine Frage, wann und wenn der Stream geschlossen wird?

Vielen Dank.

+0

Normalerweise, wenn die Verbindung schließt. In diesem Fall befindet sich die DateiResponse in einer Methode (da Sie eine Rückgabe haben) und befindet sich auf dem Ausführungsstapel. So sollte der Strom während der Rückkehr entsorgt werden. – jdweng

Antwort

0

Die Verwendung von block würde den Stream zu gegebener Zeit entsorgen.

using (var zipStream = ....) 
     { 
      Test(zipStream); 
     } 
public HttpResponseMessage Test(Stream zipStream) 
    { 
     var fileResponse = new HttpResponseMessage(HttpStatusCode.OK); 
     fileResponse.Content = new StreamContent(zipStream); 
     fileResponse.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
     return fileResponse; 
    } 
Verwandte Themen