Question

J'ai essayé d'utiliser httpwebrequest pour utiliser un reste tel que service sur un serveur distant et de la première exécution elle-même, mon code a été suspendu le programme.Ensuite, j'ai essayé en tant qu'application console pour s'assurer qu'il n'a rien à voir avec le programme lui-même, mais pas de chance!

        string credentialsJson = @"{""username"":""test"",
                                      ""password"":""test"" 
                                   }";

        int tmp = ServicePointManager.DefaultConnectionLimit;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://qrua.com/qr/service" + @"/auth/login");
        request.Method = "POST";
        request.KeepAlive = true;
        request.Timeout = 50000 ;
        request.CookieContainer = new CookieContainer();
        request.ContentType = "application/json";
        try
        {
            StreamWriter writer = new StreamWriter(request.GetRequestStream());
            writer.Write(credentialsJson);
        }
        catch (Exception e)
        {
            Console.WriteLine("EXCEPTION:" + e.Message);
        }

        //WebResponse response = request.GetResponse();
        try
        {
            using (WebResponse response = (HttpWebResponse)request.GetResponse())
            {
                Console.WriteLine("request:\n" + request.ToString() + "\nresponse:\n" + response.ContentLength);
                response.Close();
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("EXCEPTION: in sending http request:" + " \nError message:" + e.Message);
        }

J'ai essayé plusieurs choses à partir de différents forums, mais il ne vous aide pas.Même une simple application console avec le code ci-dessus, la console se bloque indéfiniment!Toute aide serait super..

Merci

Était-ce utile?

La solution

Vous n'êtes jamais à la fermeture de la StreamWriter...je crois que ce n'est pas en train d'être vidée.Certes, je m'attends à une erreur du serveur au lieu de juste un coup, mais il vaut la peine de regarder.

Btw, vous n'avez pas besoin de fermer la réponse et mettez-la au rebut.Juste le using déclaration suffit.

Autres conseils

Il n'y a pas beaucoup que vous pouvez faire si le serveur distant ne répond pas à d'autres que la définition d'une Timeout et intercepter l'exception que vous avez fait dans le but d'informer l'utilisateur que l'opération ne peut pas complète parce que le site distant n'a pas répondu:

var request = (HttpWebRequest)WebRequest.Create("https://qrua.com/qr/service/auth/login");
request.Timeout = 5000;
// If the server doesn't respond within 5 seconds you might catch the timeout exception
using (var response = request.GetResponse())
{

}

Si vous ne voulez pas de geler l'INTERFACE utilisateur vous pouvez utiliser la version asynchrone: BeginGetResponse

Essayez de spécifier la demande.contentlength.

avant de faire:

        StreamWriter writer = new StreamWriter(request.GetRequestStream());
        writer.Write(credentialsJson);

Essayez quelque chose comme ceci:

using (MemoryStream stream = new MemoryStream())
{
    using (var writer = StreamWriter writer = new StreamWriter(stream))
    {
        writer.Write(credentialsJson);
        writer.Close();
    }
    request.ContentLength = stream.Length;
}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top