2013-09-04 1 views
0

J'ai le code suivant qui s'exécute sans problèmes sur Windows Phone 8, mais en cours d'exécution sur Windows 8 entraîne une erreur.C# HttpClient erreur étrange

Erreur:

Exception received while submitting the payload: at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
    at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 
    at FooProject.HTTPHelper.<SubmitRequestToMobileAnalytics>d__a.MoveNext() in c:\Users\foo_000\Documents\GitHub\FooProject\HttpHelper.cs:line 135 
Inner Exception is: at System.Net.ConnectStream.CloseInternal(Boolean internalCall, Boolean aborting) 
    at System.Net.ConnectStream.System.Net.ICloseEx.CloseEx(CloseExState closeState) 
    at System.Net.ConnectStream.Dispose(Boolean disposing) 
    at System.IO.Stream.Close() 
    at System.Net.Http.HttpClientHandler.<>c__DisplayClass8.<GetRequestStreamCallback>b__6(Task task) 

code:

string jsonPayload = "<<<Some JSON Payload>>>"; 
using (HttpClient httpClient = new HttpClient()) 
      { 

       try 
       { 
        //Converting the JSON payload as GZipped byte array  
        byte[] payload = CompressAsByte(jsonPayload); 
        if (payload != null) 
        { 
         HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, Config.Instance().TrackingServer); 
         request.Content = new ByteArrayContent(payload); 
         request.Content.Headers.Add("Content-Encoding", "gzip"); 
         request.Content.Headers.Add("Content-Type", "application/json"); 
         HttpResponseMessage response = await httpClient.SendAsync(request); 

         return (int)response.StatusCode; 
        } 
        else 
        { 
         return 0; 
        } 

       } 
       catch (System.Exception e) 
       { 

        Logger.Log("Exception received while submitting the payload: " + e.StackTrace); 
        if (e.InnerException != null) 
        { 
         Logger.Log("Inner Exception is: " + e.InnerException.StackTrace); 

        } 

        return 0; 

       } 
      } 

Pour Windows Phone 8 App, je référencement Microsoft HttpClient à partir du référentiel NuGet. Pour Windows 8, les paquets System.Net et System.Net.Http sont déjà visibles.

Pour une raison quelconque, le même code s'exécute sur Phone fonctionne et sur Windows 8 Tablet (simulateur), il génère une erreur. Est-ce que je manque quelque chose en utilisant HttpClient sur Windows 8?

Répondre

0

J'ai ajouté le code suivant, cela a fonctionné comme par magie.

request.Content.Headers.Add("Content-Length", payload.Length.ToString()); 

Je ne sais pas pourquoi il a réussi sans cette ligne sur Windows Phone 8.

Mais cela a fonctionné.