2010-10-13 31 views
6

Eşzamansız modda bazı HTTP işlemleri gerçekleştirmek için System.Net.WebClient kullanıyorum. Eşzamanlı olmayan işlemlerin kullanılmasının nedeni, her şeyden önce, ilerleme durumu aldığım gerçeği gösterir - bu yalnızca the docs tarafından belirtildiği gibi uyumsuzluk işlemleri için kullanılabilir.Eşzamansız WebClient isteğinde HTTP üstbilgileri alın

Yani benim WebClient kurdunuz diyelim:

this.client = new WebClient(); 
this.client.UploadStringCompleted += 
    new UploadStringCompletedEventHandler(textUploadComplete); 

ve temsilci:

private void textUploadComplete(Object sender, UploadStringCompletedEventArgs e) 
{ 
    if (e.Error != null) 
    { 
     // trigger UI failure notification 
     return; 
    } 

    // FIXME not checking for response code == 200 (OK) 
    // trigger UI success notification 
} 

Yani, ben hiçbir özel duruma neden olduğunu tahmin ediyorum bkz istekleri oldu Her zaman başarılı (HTTP yanıtı durum kodu! = 2xx olabileceğinden durum böyle olmayabilir). UploadFileAsync'daki belgelerden, 200 olmayan bir cevabın da işlenip işlenmediğini anlayamıyorum.

Gerçekten C# için yaşıyorum ve bu belirli zaman uyumsuz istek yanıtı için başlığa erişmek için bir yol bulamıyorum. Bana her WebClient'un herhangi bir zamanda sadece bir cevap (veya bir başlık kümesi) tutabileceğini düşünüyor.

Aynı anda birden fazla paralel istek yürütmeyeceğim, yine de belirli bir isteğin yanıt üstbilgileri/durum kodunu almak yerine daha zarif bir yol olup olmadığını bilmek isterim. WebClient'dan "son kullanılabilir" yanıtı alın.

Teşekkürler.

+0

.NET 4.5'te misiniz? Öyleyse, TaskAsync aşırı yüklerini kullanmayı deneyin ... hala WebClient sınıfından başlıklara erişmeniz gerekir, ancak bu TAP iş akışını kullanarak hiç de sakıncalı bulamazdım ... Bunu yapmak için biraz yanlış olduğunu kabul ediyorum sıradan bir olay işleyicisi. 'bekliyoruz.UploadStringTaskAsync (...); var üstbilgiler = client.ResponseHeaders; – TCC

cevap

0

.NET 4.5'de misiniz? Öyleyse TaskAsync aşırı yüklerini kullanmayı deneyin ... hala WebClient örneğinden başlıklara erişmeniz gerekir, ancak bu TAP iş akışını kullanarak hiç bir şekilde sakıncalı bulamazdım ... Bunu yapmak için biraz yanlış olduğunu kabul ediyorum sıradan bir olay işleyicisi.

await client.UploadStringTaskAsync(...); 
var headers = client.ResponseHeaders; 

En iyisi sen UI iş parçacığı üzerinde her şeyi yapabilirsiniz ... engellemez ... böylece 'tetikleyici güncelleme UI' gerçekten sadece 'Güncelleme UI' dir.

İlgili konular