1>طرح أحد الأصدقاء سؤالاً اليوم:
لماذا لا يوجد خطأ عند استخدام عنصر التحكم في الملفات لقراءة مسارات الصور والمستندات والملفات الأخرى، ولكن عند قراءة ملفات الفيديو (مثل rmvb وغيرها)، يحدث خطأ بعدم إمكانية عرض الصفحة.
مقتطف الكود كما يلي:
الفراغ الخاص btnUpFiles_Click(مرسل الكائن، System.EventArgs e)
{
string pathName=this.File1.PostedFile.FileName.ToString();
Response.Write(pathName);
}
2>ابدأ بحل المشكلة:
اعتقدت أن هناك مشكلة في الحصول على سلسلة المسار، لذلك اعترضت المسار واسم الملف أولاً، ثم اعترضت امتداد الملف، وحفظتهما كسلاسل، ولكن كان هناك دائمًا خطأ. مقتطف الكود كما يلي:
string fullname=this.File1.PostedFile.FileName.ToString();// احصل على المسار الكامل
string=fullname.Substring(0,fullname.LastIndexOf(".")+1);// احصل على المسار واسم الملف، وقم بإزالة لاحقة الملف
Session["firstname"]=firstname;//حفظ في الجلسة
char [] Spliter={'.'};// المحدد المستخدم لتقسيم السلسلة
string [] fileName=this.File1.PostedFile.FileName.Split(spliter);// احفظ كل جزء من المسار الكامل المنقسم في المصفوفة
Session["lastname"]=fileName[fileName.Length-1];// حفظ العنصر الأخير (لاحقة الاسم) في المصفوفة كجلسة
Response.Redirect("test.aspx");// أريد تمريره إلى هذه الصفحة للاختبار.
لا تزال الطريقة المذكورة أعلاه فاشلة، ويبدو أن سبب الخطأ لا علاقة له بالسلاسل على الإطلاق.
3>اقترح مستخدمو الإنترنت "@@" أن المشكلة تتعلق بـ httpRuntime (شكرًا لك):
حل المشكلة: أضف الكود التالي إلى <system.web></system.web> في web.config:
<httpRuntime ExecutionTimeout="600" maxRequestLength="951200"
useFullyQualifiedRedirectUrl="true" minFreeThreads="8"
minLocalRequestFreeThreads = "4" appRequestQueueLimit = "100" EnableVersionHeader = "true"/>
4> شرح من MSDN:
httpRuntime هو إعدادات وقت تشغيل http asp.net لتحديد كيفية التعامل مع الطلبات المقدمة لتطبيقات asp.net.
ExecutionTimeout: يشير إلى الحد الأقصى للوقت المسموح به لتنفيذ الطلب، بالثواني
maxRequestLength: يشير إلى الحد الأقصى لحجم تحميل الملف الذي يدعمه ASP.NET. يمكن استخدام هذا الحد لمنع هجمات رفض الخدمة الناتجة عن قيام المستخدمين بتمرير أعداد كبيرة من الملفات إلى الخادم. الحجم المحدد بالكيلوبايت. القيمة الافتراضية هي 4096 كيلو بايت (4 ميجابايت).
useFullyQualifiedRedirectUrl: يشير إلى ما إذا كانت إعادة توجيه العميل مؤهلة بالكامل (بتنسيق " http://server/path "، المطلوب لبعض عناصر التحكم في الهاتف المحمول)، أو ما إذا كان سيتم إرسال إعادة توجيه نسبية إلى العميل بدلاً من ذلك. إذا كان صحيحًا، فسيتم تحويل جميع عمليات إعادة التوجيه غير المؤهلة بالكامل تلقائيًا إلى تنسيق مؤهل بالكامل. خطأ هو الخيار الافتراضي.
minFreeThreads: يحدد الحد الأدنى لعدد سلاسل الرسائل المجانية المسموح بها لتنفيذ الطلبات الجديدة. يحتفظ ASP.NET بعدد محدد من سلاسل الرسائل مجانًا للطلبات التي تتطلب سلاسل رسائل إضافية لإكمال معالجتها. القيمة الافتراضية هي 8.
minLocalRequestFreeThreads: يشير إلى الحد الأدنى لعدد سلاسل الرسائل المجانية التي يحتفظ بها ASP.NET والتي يسمح لها بتنفيذ الطلبات المحلية الجديدة. يتم حجز هذا العدد من سلاسل الرسائل للطلبات الواردة من المضيف المحلي في حالة قيام بعض الطلبات بتقديم طلبات فرعية إلى المضيف المحلي أثناء معالجتها. يؤدي ذلك إلى تجنب حالات التوقف التام المحتملة الناتجة عن إعادة الدخول إلى خادم الويب بشكل متكرر.
appRequestQueueLimit: يشير إلى الحد الأقصى لعدد الطلبات التي سيضعها ASP.NET في قائمة الانتظار للتطبيق. يتم وضع الطلبات في قائمة الانتظار عندما لا يكون هناك ما يكفي من المواضيع الحرة للتعامل مع الطلب. عندما تتجاوز قائمة الانتظار الحد المحدد في هذا الإعداد، سيتم رفض الطلبات الواردة مع ظهور رسالة الخطأ "503 - الخادم مشغول جدًا".
EnableVersionHeader: يشير إلى ما إذا كان يجب على ASP.NET إخراج رأس الإصدار. يستخدم Microsoft Visual Studio 2005 هذه الخاصية لتحديد إصدار ASP.NET المستخدم حاليًا. بالنسبة لبيئات الإنتاج، هذه الخاصية غير مطلوبة ويمكن تعطيلها.