2016-12-20 3 views
0

Ich habe ein Programm, das viele HttpWebRequest Aufrufe enthält. Es befasst sich sehr mit externen API-Anfragen zu verschiedenen Streaming-Plattformen (Twitch, Hitbox, Beam, YouTube). Alle meine Anfragen scheinen gut zu funktionieren..NET HttpWebRequest Timeout tötet alle zukünftigen Anforderungen?

Hier ein Beispiel für eine meine Anfragen ist:

private void save_Click(object sender, RoutedEventArgs e) 
{ 
    string postUrl = "https://api.twitch.tv/kraken/channels/" + this.channelID; 
    string postData = "channel[status]=" + Uri.EscapeDataString(status.Text) + 
     "&channel[game]=" + Uri.EscapeDataString(game.Text); 
    byte[] postByte = Encoding.UTF8.GetBytes(postData); 

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl); 

    request.Method = "PUT"; 
    request.Accept = "application/vnd.twitchtv.v5+json"; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    request.ContentLength = postByte.Length; 
    request.Headers.Add("Authorization", "OAuth " + password.Password); 
    request.Headers.Add("Client-ID", this.clientID); 
    request.Timeout = 15000; 

    try 
    { 
     Stream putStream = request.GetRequestStream(); 
     putStream.Write(postByte, 0, postByte.Length); 
     putStream.Close(); 

     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    } 
    catch (WebException err) 
    { 
     MessageBox.Show("Unable to update channel information:\n" + err.Message); 
    } 
} 

es ist jedoch ein Problem, dass, wenn eine Anforderung (wie ein momentaner Internet-Schluckauf) ausfällt, und der Try-Catch mit einem Fehler reagiert Aufgrund eines Timeouts werden keine zukünftigen HttpWebRequests funktionieren, bis ich mein Programm neu starte.

Dies geschieht nur, wenn der Fehlerfang durch eine Zeitüberschreitung ausgelöst wird.

Gibt es einen Grund, warum das passiert und wie kann ich es beheben?

+0

Ich habe das gleiche Problem mit HttpClient, die Antwort hier hilft nicht. – jsgoupil

Antwort

1

Es wird höchstwahrscheinlich von Ressourcen verursacht, die nicht ordnungsgemäß freigegeben werden und Sperren verursachen.

Ändern Sie Ihren Code, um vielleicht abbrechen auf HttpWebRequest auf WebException und vielleicht auch die HttpWebResponse und putStream in einer using-Anweisung.

private void save_Click(object sender, RoutedEventArgs e) 
    { 
     string postUrl = "https://api.twitch.tv/kraken/channels/" + this.channelID; 
     string postData = "channel[status]=" + Uri.EscapeDataString(status.Text) + 
      "&channel[game]=" + Uri.EscapeDataString(game.Text); 
     byte[] postByte = Encoding.UTF8.GetBytes(postData); 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(postUrl); 

     request.Method = "PUT"; 
     request.Accept = "application/vnd.twitchtv.v5+json"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.ContentLength = postByte.Length; 
     request.Headers.Add("Authorization", "OAuth " + password.Password); 
     request.Headers.Add("Client-ID", this.clientID); 
     request.Timeout = 15000; 

     try 
     { 
      using (Stream putStream = request.GetRequestStream()) 
      { 
       putStream.Write(postByte, 0, postByte.Length); 
       using (var response = (HttpWebResponse) request.GetResponse()) 
       { 
        //assign the response result to a variable else it's getting disposed 
       } 
      } 
     } 
     catch (WebException err) 
     { 
      request.Abort(); 
      MessageBox.Show("Unable to update channel information:\n" + err.Message); 
     } 
    } 
Verwandte Themen