2012-08-19 3 views
5

Quale modo è preferibile?Necessario per chiudere lo stream di richiesta web?

A:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
Stream reqStream = req.GetRequestStream(); 
reqStream.Write(data, 0, data.Length); 
reqStream.Close(); 

B:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
req.GetRequestStream().Write(data, 0, data.Length); 

risposta

13

Opzione C invece:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
using (Stream reqStream = req.GetRequestStream()) 
{ 
    reqStream.Write(data, 0, data.Length); 
} 

Ma sì, io avrei chiudere il flusso di richiesta. È possibile che non è assolutamente necessario, ma non vorrei assumere che - e in particolare, a meno che non abbiate buone ragioni per credere che sia non richiesto (come la documentazione), l'implementazione potrebbe cambiare nel tempo e rompersi codice "pigro" più tardi.

Se vi trovate a fare questo, spesso, si può sempre scrivere un metodo di utilità (forse anche come un metodo di estensione):

public static void WriteRequestData(this WebRequest request, byte[] data) 
{ 
    using (Stream reqStream = request.GetRequestStream()) 
    { 
     reqStream.Write(data, 0, data.Length); 
    } 
} 

Poi basta chiamare come:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
req.WriteRequestData(data); 
1

I' m un po 'tardi per la festa, ma questa domanda è ancora rilevante. Vorrei aggiungere: MSDN Examples anche dimostrare/suggerire la chiusura del flusso al termine della scrittura.

Stream newStream = myHttpWebRequest.GetRequestStream(); 
newStream.Write (byte1, 0, byte1.Length); 
Console.WriteLine ("The value of 'ContentLength' property after sending the data is {0}", myHttpWebRequest.ContentLength); 
// Close the Stream object. 
newStream.Close(); 

Mi piace l'esempio di Jon e seguo un modello simile.