أولا , احب ان انوه ان الرابط لتحميل مشروعك لا يعمل .
خطأ التايم اوت -او Time Out بالإنكليزية- , وضوحاً , ينتج عن فشل خادم الموقع الإلكتروني الذي طلبته الرد خلال الوقت المحدد في كائن ال HttpWebRequest .
بعد قراءة الخطأ الذي تحاول حله , يمكنني التفكير ببعض الحلول , ولكن من المهم معرفة التالي :
- ان الخطأ هو من نوع WebException , بعد الإطلاع على موقع MSDN , توضح لي أنه لا يوجد خطأ بإسم Timeout , ولكن , سنتعامل مع المشكلة في هذا الجواب على أن سببها هو حدوث Timeout في طلب ال HTTP (ربما هذا ما أخبرك اياه ال Debugger ) .
- ان مشكلة ال Timeout تعتمد على قدرة خادم الموقع الإلكتروني الرد في وقت محدد , يبدو لي أنه لابد من الأخذ بعين الإعتبار ان الخوادم قد تكون مشغولة احياناً (حسناً , هذا لايحدث مع المواقع الكبرى ) مما لا يمكنها من الرد بالسرعة المطلوبة , وقد تكون في احيان اخرى تعمل بشكل مستقر وسريع , لذا لا يمكن أبداً ايجاد حل يغنيك عن المحاولة عدة مرات في اوقات متفرقة لتقليص لائحة ال timeout.txt التي ذكرتها بسؤالك قدر الإمكان .
بناءاً على هذا , اقترح الحلول التالية :
قم بزيادة قيمة ال Timeout للكائن HttpWebRequest :
يمكنك القيام بذلك عن طريق الخاصة Timeout للكائن HttpWebRequest
مثال توضيحي :
كود :
HttpWebRequest myHttpRequest = (HttpWebRequest)WebRequest.Create("http://www.google.com/");
myHttpRequest.Timeout = 200000;
القيمة الإفتراضية هي : 100,000 Millisecond , اي 100 ثانية .
ولكن , دعنا نواجه الواقع , اذا لم يستطع الخادم الرد خلال مئة ثانية , هل يجب علينا التوقع انه سوف يرد في اي وقت قريب ؟
لا اعتقد ذلك , في أغلب الأحيان هذا يعني ان الخادم لا يعمل في الوقت الحالي .
المرجع : HttpWebRequest.Timeout Property
الإقتراح الثاني :
قم بإتمتة عملية إعادة إرسال الطلبات التي ستنفذت الوقت المسموح لها :
قم بتسجيل كل عنوان IP يستنفذ الوقت المحدد لطلبه , وقم بإعادة المحاولة لعدد محدد من المرات .
إلتقط كل كائن HttpWebRequest يرمي خطأ بسبب إستنفاذ الوقت ,
يمكنك ايجاد مساعدة في فعل هذا هنا .
ضعهم في مصفوفة , در على كل عنصر فيهم وقم بالإجراءات المناسبة لإعادة إرسال الطلب الى عنوان الايبي الذي سبق ان استنفذ .
يمكنك استخدام نوع المصفوفة
List<HttpWebRequest>
للمزيد من المعلومات عن المصفوفات من نوع
List<T>
حيث T كانت في هذا المثال
HttpWebRequest
راجع التوثيق الرسمي لها على موقع Microsoft على الرابط التالي
System.Collections.Generic.List<T>
مع الشكر .