0

Ich habe diesen Code, der in einem BackgroundWorker läuft, und sollte eine POST-Anfrage an den Server und erhalten eine Antwort. Es funktioniert gut, wenn es funktionieren soll, aber wenn ich versuche, einen 404-Fehler zu induzieren, fängt es das Fehlermeldesystem nicht ab.C# Request nicht Zeitüberschreitung

loginProcess.DoWork += delegate(object s, DoWorkEventArgs args) 
      { 
       // loginProcess BackgroundWorker 

       try 
       { 
        // Try to login, if error, report 

        loginProcess.ReportProgress(10); 
        String method = "POST"; 
        String postdata = "postdata=test"; 
        String url = "http://localhost/dev/login.php"; 

        loginProcess.ReportProgress(15); 




        WebRequest rqst = HttpWebRequest.Create(url); 
        rqst.Timeout = 5000; 
        ((HttpWebRequest)rqst).KeepAlive = true; 

        loginProcess.ReportProgress(20); 


        //rqst.Timeout = this.Timeout; 
        // only needed, if you use HTTP AUTH 
        //CredentialCache creds = new CredentialCache(); 
        //creds.Add(new Uri(url), "Basic", new NetworkCredential(this.Uname, this.Pwd)); 
        //rqst.Credentials = creds; 
        rqst.Method = method; 
        if (!String.IsNullOrEmpty(postdata)) 
        { 
         //rqst.ContentType = "application/xml"; 
         rqst.ContentType = "application/x-www-form-urlencoded"; 
         loginProcess.ReportProgress(30); 

         byte[] byteData = UTF8Encoding.UTF8.GetBytes(postdata); 

         loginProcess.ReportProgress(40); 

         rqst.ContentLength = byteData.Length; 

         loginProcess.ReportProgress(50); 
         using (Stream postStream = rqst.GetRequestStream()) 
         { 


          loginProcess.ReportProgress(50); 
          postStream.Write(byteData, 0, byteData.Length); 
          loginProcess.ReportProgress(60); 
          postStream.Close(); 
          loginProcess.ReportProgress(70);  
          rqst.GetResponse().Close(); 
          rqst.GetRequestStream().Close(); 
         } 




        } 

        loginProcess.ReportProgress(90); 
        using (var response1 = rqst.GetResponse()) 
        { 
         using (var responseStream1 = response1.GetResponseStream()) 
         { 
          using (var reader1 = new StreamReader(responseStream1)) 
          { 
          //StreamReader rsps = new StreamReader(rqst.GetResponse().GetResponseStream()); 

          string strRsps = reader1.ReadToEnd(); 
          loginProcess.ReportProgress(95); 
          loginVars = strRsps; 

          //rqst. 
          //reader1.Close(); 
          //rsps.Dispose(); 
          } 

          args.Result = "SUCCESS"; 
         } 
        } 







       } 
       catch(WebException err) 
       { 
        // Catch error and put into err variable 

        if(err.Status == WebExceptionStatus.ProtocolError) 
        { 
         // If something is wrong with protocol 
         LoginReporting.ErrorName = Convert.ToString(((HttpWebResponse)err.Response).StatusCode); 
         LoginReporting.ErrorDescription = Convert.ToString(((HttpWebResponse)err.Response).StatusDescription); 
         LoginReporting.ErrorNotes = "Error when logging in, Server returned: " + Convert.ToString(((HttpWebResponse)err.Response).StatusCode); 
         LoginReporting.ErrorLocation = "LoginRequest.ProtocolError"; 

         args.Result = "ERROR"; 
         //MessageBox.Show(Convert.ToString(((HttpWebResponse)err.Response).StatusCode)); 
        //MessageBox.Show(Convert.ToString(((HttpWebResponse)err.Response).StatusDescription)); 
        } 
        else 
        { 
        args.Result = "ERROR"; 
        } 

       } 
       catch(Exception err) 
       { 
        // Catch unhandled error 

        LoginReporting.ErrorName = Convert.ToString(err); 
         LoginReporting.ErrorDescription = Convert.ToString(err.Message); 
         LoginReporting.ErrorNotes = "Error when logging in, Server returned: " + Convert.ToString(err.Message); 
         LoginReporting.ErrorLocation = "LoginRequest.ProtocolError"; 

        args.Result = "ERROR"; 

       } 
      }; 

Ich habe eine Timeout auf die Anfrage gestellt, aber es funktioniert einfach nicht! Ist das ein Fehler, oder mache ich hier etwas falsch?

Dank

+0

Ist "Bug" das gleiche wie etwas falsch machen? –

+0

Etwas falsch machen ist ein Bug an Ihrem Ende. Hoffe immer, es ist jemandes Schuld. –

Antwort

0

A 404 ist immer noch eine Antwort vom Server auf die Anforderung des Kunden. Haben Sie versucht, den Server anzuhalten und festzustellen, ob Sie die Ausnahme abfangen?

0

Sie haben die Antwort in rqst.GetResponse().Close(); geschlossen und dann versuchen Sie, mit rqst.GetResponse() auf den Stream zuzugreifen.
Kommentieren Sie einfach rqst.GetResponse().Close(); und es sollte funktionieren ...