0

이 코드는 BackgroundWorker에서 실행되며 서버에 POST 요청을 만들어 응답을 받아야합니다. 그것은 정상적으로 작동하지만 정상적으로 작동하지만 404 오류를 유도하려고 시도 할 때 오류보고 시스템을 포착하지 않습니다.C# 요청 시간 초과 없음

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"; 

       } 
      }; 

요청에 시간 제한을 넣었지만 작동하지 않습니다. 이것은 버그입니까, 아니면 제가 여기서 뭔가 잘못하고 있습니까?

감사합니다.

+0

"버그"는 잘못된 일을하는 것과 동일한 것입니까? –

+0

잘못된 것을하는 것은 결국 버그입니다. 항상 다른 사람의 잘못이되기를 바랍니다. –

답변

0

404는 여전히 클라이언트의 요청에 대한 서버의 응답입니다. 서버를 중지하고 코드가 예외를 포착하는지 확인해 보았습니까?

0

rqst.GetResponse().Close();에서 응답을 닫은 다음 rqst.GetResponse()으로 스트림에 액세스하려고합니다.
그냥 rqst.GetResponse().Close();을 주석 처리하고 작동해야합니다 ...