سؤال

كنت أحاول استخدام httpwebrequest لاستخدام خدمة الراحة على خادم بعيد ومن التنفيذ الأول نفسه، كان الكود الخاص بي معلقًا على البرنامج.ثم قمت بتجربته كتطبيق وحدة تحكم للتأكد من أنه لا علاقة له بالبرنامج نفسه ولكن لم يحالفني الحظ!

        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);
        }

حاولت عدة أشياء من منتديات مختلفة ولكن لا يساعد.حتى تطبيق وحدة التحكم البسيط الذي يحتوي على الكود أعلاه يعلق وحدة التحكم إلى أجل غير مسمى!أي مساعدة ستكون عظيمة..

شكرًا

هل كانت مفيدة؟

المحلول

أنت لا تغلق أبدًا StreamWriter...لذلك أظن أنه لا يتم مسحه.من المسلم به أنني كنت أتوقع حدوث خطأ من الخادم بدلاً من مجرد تعليق، ولكن الأمر يستحق النظر فيه.

راجع للشغل، لا تحتاج إلى إغلاق الرد و التخلص منه.فقط using البيان يكفي.

نصائح أخرى

ليس هناك الكثير مما يمكنك فعله إذا كان الخادم البعيد لا يستجيب بخلاف تعريف GransoDicetagCode والقبض على الاستثناء كما فعلت من أجل إبلاغ المستخدم بأن العملية لا يمكن أن تكتمل العملية لأن الموقع البعيد لم يستجب:

giveacodicetagpre.

إذا كنت لا ترغب في تجميد UI، فيمكنك استخدام إصدار ASYNC: begingetresponse

حاول تحديد طلب الطلب.

قبل القيام:

giveacodicetagpre.

جرب شيئا مثل هذا:

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top