سؤال

أحاول تحميل الملفات إلى خادم ويب باستخدام System.Net.WebClient.UploadFile ولكني أستمر في الحصول على WebException.على وجه التحديد، أتلقى 3 أخطاء.ليس لدي أي فكرة عن سبب عدم ظهور نفس الخطأ، ولكن يبدو أنهم جميعًا مرتبطون بناءً على ما وجدته عبر الإنترنت.

  • تم إحباط الطلب:تم إلغاء الطلب.
  • اتصال مغلقة.حاول ثانية.
  • تم إغلاق اتصال موجود بالقوة بواسطة المضيف البعيد.

يبدو عشوائيًا إلى حد ما (ليس دائمًا نفس الملف أو مقدار الوقت أو أي نمط آخر يمكنني اكتشافه).كما أن هذا لا يحدث على شبكة العمل الخاصة بي (يستغرق التحميل أقل من ثانيتين)، ولكنه يحدث من المنزل عبر خط المشترك الرقمي (يستغرق التحميل حوالي دقيقتين).

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

أعتقد أن الأمر قد يكون له علاقة بالمهلات، لكن لا يمكنني معرفة السبب.الخادم هو ASP.Net MVC وتم ضبط المهلة على ساعة.

    <httpRuntime
        maxRequestLength="10024" 
        executionTimeout="3600"
        /><!-- 10024 = 10MB, 3600 = 1hr -->

أنا مهتم بكلتا الطريقتين لإصلاح هذه المشكلة حتى لا تحدث وكذلك تقنيات الاسترداد (مجرد تقديم الطلب مرة أخرى لا يبدو فعالاً).

بعض المعلومات الأساسية، هذا لتطبيق WinForms الذي يقوم بتحميل الصور إلى الخادم.الخادم هو تطبيق ASP.Net MVC.لقد عمل العميل بشكل صحيح لفترة طويلة ولكنه يفشل الآن منذ أن قمت بتحويله إلى ASP.Net MVC (كان يستخدم ASP الكلاسيكي مع SA FileUp).لم يتغير جانب العميل إلا لاستيعاب عناوين URL الجديدة، بخلاف أنه متماثل إلى حد كبير.

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

المحلول

الاستثناء "تم إحباط الطلب:تم إلغاء الطلب." يتم طرحه إذا انتهت مهلة WebClient أثناء نقل الملف.في حالة عدم إجراء أي نقل للملفات، ستظهر لك رسالة "انتهت مهلة العملية" بدلاً من ذلك.

المهلة تحدث على العميل.لا يسمح لك WebClient بتعيين المهلة ويكون الإعداد الافتراضي لـ HttpWebRequest (ما يستخدمه WebClient) هو 100 ثانية.أعتقد أنه سيتعين علي معرفة كيفية تحقيق التقدم عند استخدام HttpWebRequest.سيتعين علي أيضًا معرفة سبب كون نقل ملفات ASP.Net أبطأ من استخدام SAFileUp مع ASP الكلاسيكي.

تحديث:لقد قمت بإنشاء فئة WebHelper التي تحل محل WebClient ولكنها توفر المزيد من الوصول إلى الميزات الضرورية لـ WebRequest الأساسي.كما يوفر أيضًا مجموعة من الإمكانات الإضافية عبر WebClient.إذا كنت مهتما، فهو متوفر في مشروع بيز آرك على كودبلكس.

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