2017-10-09 5 views
1

우리는 웹 API REST 웹 서비스에 액세스하는 웹 API 클라이언트를 사용하고 있습니다. 비주얼 스튜디오 debbugging없이 코드를 실행할 때 그것은 발생하지 않습니다 2015 년 디버깅 할 때Visual Studio에서 디버깅 할 때 기본 연결이 닫혔습니다.

An error occured while sending the request (Inner Exception: The underlying conection was closed: An unexpected error occured on a send) 

에만 발생 : 디버깅 할 때이를 호출 할 때

우리는 다음과 같은 오류를 얻고있다. 우리는 .NET 4.6.1을 사용하고 있습니다.

왜 이런 일이 발생합니까? 디버깅하지 않을 때 실행되는 이유는 무엇입니까? 이 문제를 어떻게 해결할 수 있는지, 그리고 우리가 확인할 수있는 아이디어가 있습니까?

우리는 웹 서비스 호출을 다음 코드를 사용

public async Task<string> GetToken(string username, string password) 
    { 
     using (var client = new HttpClient()) 
     { 
      InitializeHttpClient(client); 

      HttpContent requestContent = new StringContent("grant_type=password&username=" + username + "&password=" + password, Encoding.UTF8, "application/x-www-form-urlencoded"); 

      var response = await client.PostAsync("token", requestContent); 

      if (response == null || response.StatusCode == HttpStatusCode.BadRequest) 
       return null; 

      if (response.StatusCode == HttpStatusCode.NotFound 
       || response.StatusCode == HttpStatusCode.RequestTimeout 
       || response.StatusCode == HttpStatusCode.BadGateway 
       || response.StatusCode == HttpStatusCode.ServiceUnavailable) 
      { 
       throw new Exception("No Connection to Web Service"); 
      } 

      var bearerData = response.Content.ReadAsStringAsync().Result; 

      return JObject.Parse(bearerData)["access_token"].ToString(); 
     } 
    } 


    private void InitializeHttpClient(HttpClient client) 
    { 
     client.BaseAddress = new Uri(_webServiceAddress); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Add("User-Agent", "Test Client"); 
    } 

    private void InitializeHttpClient(HttpClient client, string token) 
    { 
     InitializeHttpClient(client); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
     client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", token); 

    } 
+0

같은 프로젝트를 디버깅 할 때 다른 컴퓨터에서 발생합니까? – DiskJunky

+0

이 경우 코드에 중단 점을 넣으시겠습니까? 아니면 그냥 디버거로 실행하지만 아무데도 휴식하지? 그것은 항상 또는 때때로 발생합니까? – Evk

+0

Windows 10 및 Visual Studio 2017이 설치된 두 번째 PC가 있습니다. 모든 것이 핵심으로 실행됩니다. 응용 프로그램을 정상적으로 디버깅 할 수 있습니다. 이 문제가 발생한 PC는 Visual Studio 2015가 설치된 Windows 7에서 실행됩니다. – Alexander

답변

1

Windows Update KB4041083에 의해 발생한 것으로 보입니다. 이 업데이트를 제거하고 모든 것이 정상적으로 작동했습니다.

+0

그것이 해결 되었기 때문에 기꺼이 답을 표시 할 수 있으므로 귀하와 동일한 문제를 가진 다른 커뮤니티 회원에게 도움이 될 수 있습니다. 공유해 주셔서 감사합니다. –

0

당신이 올바르게 설정을 구성한 다음

을 확인 할 수 있도록 같은 오류로 이어지는 몇 가지 이유가 있습니다. 시스템의 방화벽이 연결을 허용합니다 (프로토콜, 호스트 & 포트) 네트워크에 구성된 DNS 서버가 호스트를 확인할 수 있습니다. 어떤 이유로 인해 ISP에서 연결을 차단하지 않습니다. 오류에 대한 해결 방법이 없으므로 실제 문제를 파악하기 위해 조금 노력해야 할 수 있습니다. 사용 가능한 경우 로그 파일에서 유용한 정보를 찾을 수도 있습니다.

+0

사용자가 디버깅하는 경우 IIS가 아닌 IISExpress에서 실행될 가능성이 있습니다 (가능하지만). 그렇다면 외부 DNS 또는 네트워크 문제는 아니지만 컴퓨터 자체에 국한 될 가능성이 있습니다. – DiskJunky

+0

동일한 PC에서 디버깅하지 않고 응용 프로그램을 실행하면 예상대로 작동합니다. 이것은 Visual Studio에서 debbugging 할 때만 발생합니다. 그러므로 네트워크 설정이 괜찮다고 생각합니다. – Alexander

+0

웹 API 서비스는 네트워크 내부의 서버에서 실행됩니다. 클라이언트 응용 프로그램 만 디버깅합니다. 웹 서비스는 프로덕션 웹 서비스입니다. 웹 서비스는 다른 PC를 통해 호출되거나 디버깅하지 않고 응용 프로그램을 실행할 때 올바르게 실행됩니다. – Alexander