2017-12-19 14 views
1

웹 클라이언트를 사용하여 서버에 요청 매개 변수를 보내고 요청에 따라 응답을받습니다. 하지만 내가 웹 클라이언트 요청을 보내려고 할 때마다 직면하는 문제는 요청을 보내는 동안 인터넷 연결이 끊어지면 내 응용 프로그램이 멈추는 것입니다. 때로는 응용 프로그램이 충돌합니다. 내 코드 조각은 아래에 있습니다.웹 클라이언트 요청이 응답하지 않을 때 인터넷 연결이 끊어지면 응답하지 않습니다.

WebClient webClient=new WebClient() 
    userData = webClient.UploadValues(URL, "POST", parameters); 

         ` 

인터넷 연결을 끊으면 해당 줄을 실행하는 동안 응용 프로그램이 중단됩니다.

+0

당신은 답변을 가지고 있지만 비동기 메서드 인'.UploadValuesAsync'로 전환하여 UI를 프로세스에서 분리하고 작업 진행에 대한 알림을 얻으라고 제안합니다. [UploadProgressChanged 이벤트] (https :// /msdn.microsoft.com/ko-kr/library/system.net.webclient.uploadprogresschanged(v=vs.110).aspx). 또한 [NetworkAvailabilityChanged 이벤트] (https://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkchange.networkavailabilitychanged.aspx)를 살펴보십시오. 사용 가능한 네트워크 연결이 없을 때 알림을 받으려면 이벤트를 구독하십시오. – Jimi

+0

@Jimi '.UploadValuesAsync'를 사용하라는 제안을합니다. 그것은 작동하지만 아무것도 반환하지 않으며 나는 바이트 형식으로 응답을 원합니다. 응답에 따라 우리는 다른 작업을 수행합니다. 그 상황에 대한 해결책을 가져라. 감사합니다. . –

+0

WebClient 이벤트 [UploadValuesCompletedEventHandler] (https://docs.microsoft.com/en-us/dotnet/api/system.net.uploadvaluescompletedeventhandler?view=netframework-4.7)를 구독하십시오. 업로드가 완료되면 [UploadValuesCompletedEventArgs] (https://docs.microsoft.com/en-us/dotnet/api/system.net.uploadvaluescompletedeventargs?view=netframework-4.7) 'e.Result'에는 바이트 배열의 서버. 또한'e.Error'와'e.Cancelled'를 반환합니다. (이번에는 2 "L"이됩니다.) – Jimi

답변

0
private class YourWebClient : WebClient 
     { 
      protected override WebRequest GetWebRequest(Uri uri) 
      { 
       WebRequest wr = base.GetWebRequest(uri); 
       wr.Timeout = 7 * 1000; 
       return wr; 
      } 
     } 

. 나는 그것을 시험했고 그것은 나를 위해 일했다. 사실 webclient 기본 시간 초과는 100 초이지만 기본적으로 약 20-25 또는 30 초가 걸립니다. 서버에서 소요되는 시간을 알고있는 응답에 따라 응답 시간을 변경합니다. 이 코드를 작업 할 때 threads을 사용할 수도 있습니다. UI은 교수형 처리되지 않습니다.

희망이 있으면 도움이 될 것입니다.

0

WebClient를 확장 할 수 있으므로 시간 초과가 발생할 수 있습니다. 이 시도 : 당신은 당신의 욕망에 따라 시간 제한을 변경할 수 있습니다

class WebClientWithTimeout : WebClient { 
    public WebClientWithTimeout(int timeout) { 
    _timeout = timeout 
    } 
    // Timeout in seconds 
    int _timeout; 
    protected override WebRequest GetWebRequest(Uri uri) { 
    WebRequest webRequest = base.GetWebRequest(uri); 
    webRequest.Timeout = 1000 * _timeout; 
    return w; 
    } 
} 
+0

죄송합니다. 제게 많은 정보를주지 못해서 제 질문에 대해 오해 한 것 같습니다. 친애하는 내 응용 프로그램이 잠시 교수형되고 예외 exception.I 던져 때까지 인터넷의 연결이 끊어지면 코드 줄을 처리 할 때 (가능한 경우) 종료됩니다. 감사합니다. –

+0

저는 정말로 이해하지 못합니다. 인터넷 연결을 확인할 수있는 일반적인 방법은 없습니다. 제한 시간에 예외를 원한다면 그에 따라 샘플 코드를 변경하십시오. –