2016-10-26 1 views
1

Je veux envoyer des données JSON en utilisant ce code à un serveur distant (repos, en dehors de mon contrôle), suivant la façon dont je te l'envoie:L'affichage d'un JSON à un serveur distant (REST) ​​

Je crée l'URL et la méthode de la première demande:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(gUrlDot); 
     request.Method = "POST"; 
     Dictionary<String, String> lDictionary = new Dictionary<String, String>(); 
     System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding(); 
     Dot lDot= new Dot(); 
     serviceContext lserviceContext = new serviceContext(); 
     items litems = new items(); 
     lDot.rad = pClient; 
     lDictionary.Add("companyId", "00230"); 
     lDictionary.Add("treatmentDate", lGlobals.FormatDateYYYYMMDD()); 
     lDictionary.Add("country", "FR"); 
     lDictionary.Add("language", "fr"); 
     lDictionary.Add("Id", "test"); 


     litems.contextItem = lDictionary; 
     lDot.serviceContext = lserviceContext; 
     lDot.serviceContext.items = litems; 
     String Input=_Tools.JsonSerializer(lDot); 
     log.Debug("Input Dot " + Input); 

     Byte[] byteArray = encoding.GetBytes(Input); 

     request.ContentLength = byteArray.Length; 
     request.ContentType = @"application/json"; 

     using (Stream dataStream = request.GetRequestStream()) 
     { 
      dataStream.Write(byteArray, 0, byteArray.Length); 
     } 

     long length = 0; 

Quand je reçois ici, il se bloque avec un Execption: erreur 500!

 try 
     { 
      using (var response = (HttpWebResponse)request.GetResponse()) 
      { 
       length = response.ContentLength; 
       string output = response.ToString(); 
       lTrace.AppendLine("-Flux Json recu => " + response.StatusCode + " " + length); 
       log.Debug("Output Dot " + output); 

      } 
      log.Info(LogsHelper.LogHeader("End processing Get list ", pClient, Service.SrvGetList, "", lResponse.StatusCode, lResponse.StatusLabel, lResponse.ResponseObject, ref lTrace)); 

     } 
     catch (Exception ex) 
     { 
      lResponse.StatusCode = StatusCodes.ERROR_COMMUNICATION; 
      log.Error(LogsHelper.LogHeader("End processing Get list", pClient, Service.SrvGetList, "", lResponse.StatusCode, ex.Message, lResponse.ResponseObject, ref lTrace)); 
     } 

     return lResponse; 
    } 

Que manque-t-il ici?

+0

Avez-vous reçu une erreur de message du serveur (comme le débogage avec fiddler)? Le code d'état Http "500" indique une erreur interne du serveur. Si votre demande est valide, l'erreur peut provenir du serveur distant. – djluis

Répondre

2

Une erreur 500 signifie qu'il y a un problème sur le serveur auquel vous faites la demande. Vous devrez vérifier pour vous assurer de deux choses.

1) Assurez-vous que votre requête est correctement formatée et qu'elle ne contient aucune surprise ou valeur non valide pour la ressource demandée. 2) que le serveur avec lequel vous voulez parler peut recevoir des demandes, et que c'est à jour (si vous contrôlez le client). Dans les deux cas, la raison la plus fréquente d'un 500 est que quelque chose en dehors de votre contrôle a mal tourné sur le serveur client.