2016-06-08 3 views
5

Je crée une nouvelle application Windows 8.1 juste pour tester cette erreur que je reçois. L'application n'a qu'une seule fonction:HttpClient.GetStringAsync (url) throwing "La connexion sous-jacente était fermée: une erreur inattendue s'est produite sur un envoi." 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; 
      } 
     } 

Il entre dans toujours les prises et de lancer « La connexion sous-jacente a été fermée: Une erreur inattendue est survenue sur un envoi. » J'ai trouvé beaucoup de questions le mentionnant mais aucune solution n'a fonctionné pour moi puisque c'est une application de magasin de Windows 8.1 pas une application d'ASP.NET.

L'Uri que j'utilise s'ouvre dans le navigateur et fonctionne très bien. J'ai même obtenu cet article: https://support.microsoft.com/en-us/kb/915599 mais pas de solution. Quelqu'un a déjà rencontré ce problème?

Edit:

J'ai changé la méthode à utiliser 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

avez-vous essayé d'autres points de terminaison d'URL? obtenez-vous la même erreur? –

+1

Publiez l'exception * full * (c'est-à-dire utilisez e.ToString() '), pas seulement le message de l'exception interne. Vérifiez également le code d'état de la réponse. Est-ce un 4xx, 5xx? Utilisez Fiddler pour capturer la requête brute et la réponse du serveur. Si le serveur tombe en panne et ne renvoie même pas une réponse complète, il ne sert à rien de changer le code client. –

+2

PS Comment appelez-vous cette méthode? 'async void' veut dire" fire-and-forget ". Cela ne peut pas être attendu. Votre programme ou cadre de test se termine probablement avant la fin du test. Utilisez 'async Task' à la place. 'async void' devrait être utilisé pour les gestionnaires d'événements ou des méthodes similaires seulement –

Répondre

2

Il se trouve que j'utilisais Windows.Net.Http qui ne prend pas en charge TLS1.2. Windows.Web.Http fait.

+0

'System.Net.Http' –