الطلب التي تم إرسالها بواسطة الفئة HttpWebRequest قد يتوقف عن الاستجابة عند استخدام فئة HttpWebRequest في تطبيق ASP.NET

ينطبق على: Microsoft ASP.NET

الأعراض


عند استخدام فئة HttpWebRequest في تطبيق Microsoft ASP.NET، قد طلب التي يتم إرسالها بواسطة الفئة HttpWebRequest عن الاستجابة.

السبب


قد تحدث هذه المشكلة عند استخدام فئة HttpWebRequest وفئه هتبويبريسبونسي جعل HTTP أو انقضاء مهلة الطلب HTTPS من صفحة ASP.NET وصفحة ASP.NET قبل الانتهاء من الطلب. عند انتهاء مهلة الصفحة ASP.NET، تم إحباط الطلب. تم إحباط الطلب قد ترك الاتصال التي تم تهيئتها بواسطة الفئة HttpWebRequest في حالة غير معروفة وقد يؤدي إلى فشل الطلب. ملاحظة: استخدام الفئات في التعليمات البرمجية المدارة مثل SOAP واﻻتصال عن بعد داخليا فئة HttpWebRequest . لذلك، التعليمات البرمجية المدارة الفئات قد يحمل نفس السلوك.

الحل البديل


لإيجاد حل بديل لهذا السلوك، يجب التأكد من أن قيمة المهلة ASP.NET كبيرة بما يكفي لمعالجة إرسال الطلب بطريقة HttpWebRequest.GetResponse وقراءة دفق الاستجابة التي تم استردادها باستخدام هتبويبريسبونسي الفئة. ملاحظة: طلب HTTP يتكون من الأجزاء التالية:
  1. إرسال الطلب مغطى باستخدام أسلوب HttpWebRequest.Timeout .
  2. الحصول على عنوان استجابة مغطى باستخدام أسلوب HttpWebRequest.Timeout .
  3. قراءة نص الاستجابة لم تتم تغطيتها باستخدام أسلوب HttpWebResponse.Timeout . في ASP.NET 1.1 والإصدارات الأحدث، يتم تغطيتها قراءة نص الاستجابة باستخدام أسلوب HttpWebRequest.ReadWriteTimeout . يتم استخدام أسلوب HttpWebRequest.ReadWriteTimeout لمعالجة الحالات فيها استرداد رؤوس الاستجابة في الوقت مناسب ولكن انتهت مهلة قراءة نص الاستجابة.
تعيين قيمة المهلة ASP.NET في ملف web.config أو في ملف machine.config يستخدم الخاصية ب executionTimeout في قسم < هتبرونتيمي > . ملاحظة: إذا تم تعيين الخاصية في ملف.config التصحيح إلى true، يتم تجاهل الخاصية ب executionTimeout . يجب تعيين الإعداد ب executionTimeout ASP.NET إلى قيمة أكبر من أو يساوي القيمة تحدد بواسطة الصيغة التالية:
(HttpWebRequest.Timeout * 2) + HttpWebRequest.ReadWriteTimeout

الحالة


يعتبر هذا السلوك حسب التصميم.

المراجع


لمزيد من المعلومات، راجع مواقع شبكة مطوري Microsoft (MSDN) التالي على الويب: