Je travaille actuellement sur une application simple qui utilise des objets JSON pour POST à une API et obtient les données de réponse. Toutefois, lorsque j'exécute la méthode POST, la réponse POST est si grande que je rencontre l'exception OutOfMemory.C# OutOfMemory Exception lors de la lecture de Post Response
J'utilise actuellement WebClient et CookieContainer pour le processus:
string jsonObject ="...."; //Example JSON string - It's very small
using (var client = new WebClient())
{
var auth = new NameValueCollection();
values["username"] = "username";
values["password"] = "password";
client.uploadValues(endpoint,auth);
// This is causing the OutOfMemory Exception
var response = client.uploadString(endpoint, jsonObject);
}
J'ai étudié la question, et ont mis la propriété AllowStreamBuffering faux.
client.AllowStreamBuffering() = false;
Cependant, je rencontre toujours la question, et je ne sais pas comment contrôler la réponse POST.
Mise à jour: 7/5/2017
Merci à suggestions @ Tim, j'ai déménagé à un courant de la réponse, mais je rencontre des problèmes en ce qui concerne la réponse réelle. Après avoir écrit le JSON (en tant que chaîne) au point de fin avec une méthode POST, le script reste bloqué pour essayer de lire la réponse.
String endPoint = @"http://example.com/v1/api/";
String json = @"....";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endPoint);
request.Method = "POST";
request.KeepAlive = false;
request.AllowReadStreamBuffering = false;
/* Pretend this middle part does the Authorization with username and password. */
/* I have actually authenticated using the above method, and passed a key to the request */
//This part POST the JSON to the API
using (StreamWriter writeStream = new StreamWriter(request.GetRequestStream()))
{
writeStream.Write(json);
writeStream.Flush();
writeStream.Close();
}
//This bottom part opens up a console, but never reads or loads the data
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
Je me demande si le JSON n'est pas encodé probablement.
(Side Note: Je l'ai regardé écrire la réponse, ligne par ligne sur un fichier, mais il est la réponse qui est l'origine du problème - http://cc.davelozinski.com/c-sharp/fastest-way-to-read-text-files)
La réponse ici semble liée à votre problème: https://stackoverflow.com/questions/15163451/system-outofmemoryexception-was-thrown-webclient-downloadstringasynch – Tim
Salut Tim, merci pour l'info. Je n'ai pas essayé d'utiliser HttpWebRequest pour getResponse(), mais je le mettrai à jour si c'est la solution. –
Vous devrez peut-être utiliser un flux, BeginGetResponse devrait vous permettre de récupérer toute la réponse en morceaux – Tim