2012-08-19 25 views
5

Hangi yol tercih edilir?Web isteği akışını kapatmak için gerekli mi?

A:

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

B: yerine

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

cevap

13

Seçenek C:

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

Ama evet, istek akışını kapatmak istiyorum. Bu kesinlikle gerekli olmayan var, ama bunu varsaymak istiyorum - ve özellikle, (örneğin, belgeler gibi) değil inanmak için iyi bir neden olmadığı sürece, uygulama zamanla değişebilir ve kırmak olabilir Daha sonra "tembel" kodu. Kendinizi sık sık bunu bulursanız

, her zaman (hatta bir uzantısı yöntemi olarak muhtemelen) bir yardımcı yöntem yazabilirsiniz:

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

Sonra ara artık: Ben

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

Partiye biraz geç ama bu soru hala geçerli. Eklemek istediğim: MSDN Examples ayrıca yazma tamamlandığında akışı kapatmayı önerdi/öneriyor.

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

Jon'un örneğini seviyorum ve benzer bir desen izleyin.

İlgili konular