2016-06-08 41 views
5

Tworzę nową aplikację Windows 8.1 tylko do testowania tego błędu, który dostaję. Aplikacja posiada tylko jedną funkcję:HttpClient.GetStringAsync (url) throwing "Podstawowe połączenie zostało zamknięte: Wystąpił nieoczekiwany błąd podczas wysyłania." Windows 8.1 C#

private async void TestMethod() 
     { 
      try 
      {      
       HttpClient httpClient = new HttpClient(); 
       HttpResponseMessage response = await httpClient.GetAsync("https:// url ");      
      } 
      catch (HttpRequestException e) 
      { 
       string s = e.InnerException.Message; 
      } 
     } 

To jest zawsze wejściem zaczep i rzucanie „Połączenie podstawowe zostało zamknięte. Wystąpił nieoczekiwany błąd na wysyłanie” Znalazłem wiele pytań o tym wspominających, ale żadne rozwiązanie nie działało dla mnie, ponieważ jest to aplikacja Windows 8.1 Store, a nie aplikacja ASP.NET.

Uri, którego używam, otwiera się w przeglądarce i działa bardzo dobrze.

Dotarłem nawet do tego artykułu: https://support.microsoft.com/en-us/kb/915599, ale bez rozwiązania. Ktoś już wcześniej zaingerował w ten problem?

Edit:

Zmieniłem sposób używać async Task

 
System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host 
    at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult) 
    at System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult) 
    --- End of inner exception stack trace --- 
    at System.Net.TlsStream.EndWrite(IAsyncResult asyncResult) 
    at System.Net.PooledStream.EndWrite(IAsyncResult asyncResult) 
    at System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar) 
    --- End of inner exception stack trace --- 
    at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 
    at System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar) 
    --- End of inner exception stack trace --- 
    at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at HttpRequestTestApp.MainPage.d__0.MoveNext() 
+0

czy wypróbowałeś inne punkty końcowe URL? Czy otrzymujesz ten sam błąd? –

+1

Opublikuj * pełny * wyjątek (tj. Użyj 'e.ToString()'), a nie tylko komunikat o wyjątku wewnętrznym. Sprawdź również kod statusu odpowiedzi. Czy to 4xx, 5xx? Użyj Fiddlera, aby przechwycić surowe żądanie i odpowiedź serwera. Jeśli serwer zawiesi się i nie zwróci pełnej odpowiedzi, nie ma sensu zmieniać kodu klienta. –

+2

PS Jak się nazywa ta metoda? 'async void' oznacza" fire-and-forget ". Nie można się tego spodziewać. Twój program lub framework testowy prawdopodobnie wygasa przed zakończeniem testu. Zamiast tego użyj "async Task". "async void" powinien być użyty tylko w przypadku procedur obsługi zdarzeń lub podobnych metod. –

Odpowiedz

2

Okazuje się, używałem Windows.Net.Http że nie obsługuje TLS1.2. Windows.Web.Http ma.

+0

'System.Net.Http' –