أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

PRB: يتعذر على "Response.WriteFile" تنزيل ملف كبير

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

اضغط هنا لرابط المقالة باللغة الانجليزية812406
الأعراض
عند محاولة استخدام أسلوب Response.WriteFile لتنزيل ملف كبير قد لا تستجيب التحميل ومن ثم قد تتلقى إحدى رسائل الخطأ التالية:
لا يمكن عرض الصفحة
- أو -
تطبيق الملقم غير متوفر

تطبيق ويب الذي تحاول الوصول إليه على ملقم ويب هذا غير متوفر حالياً. الرجاء ضغط الزر "تحديث" في مستعرض ويب لديك لإعادة محاولة إرسال الطلب.

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

إيقاف Aspnet_wp.exe (أو W3wp.exe للتطبيقات التي تعمل على خدمات معلومات إنترنت Microsoft [IIS] 6.0) بشكل غير متوقع.

أثناء هذه العملية قد تلاحظ زيادة في استخدام الذاكرة من ملقم ويب.
السبب
تكوين أجهزة كمبيوتر ملقم ويب يحدد الحد الأقصى لحجم الملف التي يمكنك تحميلها بنجاح. عند تشغيل العملية المنفِذة ASP.NET (Aspnet_wp.exe أو W3wp.exe للتطبيقات التي تعمل على 6.0 خدمات معلومات إنترنت [IIS]) طلب تحميل الملف, يظهر مربع الحوار تنزيل الملف. يبدأ عملية العامل ASP.NET في إرسال البيانات إلى عملية خدمات معلومات إنترنت Microsoft (Inetinfo.exe أو تؤدي). لا ينتظر لك انقر فوق موافق.

اعتماداً على تكوين جهاز الكمبيوتر قد عملية IIS معالجة البيانات أو قد تكون البيانات مؤقتاً في الذاكرة. عندما يكون الملف كبير مؤقتاً البيانات في الذاكرة أثناء إجراء اتصال بين هذه العمليات اثنين. قد يؤدي ذلك إلى زيادة في استخدام الذاكرة على الملقم. يحدث الخطأ بسبب القيود الذاكرة الموجودة على ملقم ويب.
الحل البديل
كمحاولة للتغلب على هذه المشكلة استخدم أي من الطرق التالية:
  • الحصول على البيانات الموجودة في أجزاء صغيرة ثم قم بنقل البيانات إلى دفق الإخراج للتنزيل. توضح التعليمة البرمجية التالية كيفية القيام بذلك.

    هام عند تعيين قيمة السمة التصحيح عنصر التجميع إلى false في ملف Web.config تطبيق ASP.NET يجب عليك تعيين الخاصية Server.ScriptTimeOut إلى قيمة مناسبة لحجم تحميل ملف. افتراضياً، يتم تعيين القيمة Server.ScriptTimeOut إلى 90 ثانية. ومع ذلك، عند تعيين السمة debugtrue قيمة Server.ScriptTimeOut سيتم تعيين إلى كبيرة جدًا 30,000,000 ثانية. كما مطوري يجب علم تأثير هذا قد يكون لديك على سلوك تطبيق ويب ASP.NET الخاص بك.

    أيضاً، في التعليمات البرمجية التالي الذي يجب أن تكون على علم قيم المعلمات المستخدمة مع مُنشئ يقوم FileStream. قيم التعداد غير المحدد تأكد تأثير هام على الوظائف التي يتم توفيرها. لمزيد من المعلومات، راجع الارتباط يقوم FileStream في المقطع REFERENCES.
    رمز .NET Visual BasiciStream
          Dim iStream As System.IO.Stream      ' Buffer to read 10K bytes in chunk:      Dim buffer(10000) As Byte      ' Length of the file:      Dim length As Integer      ' Total bytes to read:      Dim dataToRead As Long      ' Identify the file to download including its path.      Dim filepath As String = "DownloadFileName"      ' Identify the file name.      Dim filename As String = System.IO.Path.GetFileName(filepath)      Try         ' Open the file.         iStream = New System.IO.FileStream(filepath, System.IO.FileMode.Open, _                                                IO.FileAccess.Read, IO.FileShare.Read)         ' Total bytes to read:         dataToRead = iStream.Length                  Response.ContentType = "application/octet-stream"         Response.AddHeader("Content-Disposition", "attachment; filename=" & filename)         ' Read the bytes.            While dataToRead > 0                ' Verify that the client is connected.                If Response.IsClientConnected Then                    ' Read the data in buffer                    length = iStream.Read(buffer, 0, 10000)                    ' Write the data to the current output stream.                    Response.OutputStream.Write(buffer, 0, length)                    ' Flush the data to the HTML output.                    Response.Flush()                    ReDim buffer(10000) ' Clear the buffer                    dataToRead = dataToRead - length                Else                    'prevent infinite loop if user disconnects                    dataToRead = -1                End If            End While      Catch ex As Exception         ' Trap the error, if any.         Response.Write("Error : " & ex.Message)      Finally         If IsNothing(iStream) = False Then            ' Close the file.            iStream.Close()         End If         Response.Close()      End Try
    رمز Visual C# لـ .NET
    	System.IO.Stream iStream = null;	// Buffer to read 10K bytes in chunk:	byte[] buffer = new Byte[10000];	// Length of the file:	int length;	// Total bytes to read:	long dataToRead;	// Identify the file to download including its path.	string filepath  = "DownloadFileName";	// Identify the file name.	string  filename  = System.IO.Path.GetFileName(filepath);	try	{		// Open the file.		iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, 					System.IO.FileAccess.Read,System.IO.FileShare.Read);		// Total bytes to read:		dataToRead = iStream.Length;		Response.ContentType = "application/octet-stream";		Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);		// Read the bytes.  		while (dataToRead > 0)		{			// Verify that the client is connected.			if (Response.IsClientConnected) 			{				// Read the data in buffer.				length = iStream.Read(buffer, 0, 10000);				// Write the data to the current output stream.				Response.OutputStream.Write(buffer, 0, length);				// Flush the data to the HTML output.				Response.Flush();				buffer= new Byte[10000];				dataToRead = dataToRead - length;			}			else			{				//prevent infinite loop if user disconnects				dataToRead = -1;			}		}	}	catch (Exception ex) 	{		// Trap the error, if any.		Response.Write("Error : " + ex.Message);	}	finally	{		if (iStream != null) 		{			//Close the file.			iStream.Close();		}		Response.Close();	}	
    استبدال DownloadFileName مع اسم الملف أكبر من 100 ميغابايت (MB).

    - أو -
  • توفر ارتباطًا المستخدم لتحميل الملف.

    - أو -
  • استخدم Microsoft ASP 3.0 التحميلات أو استخدام برنامج FileUp Artisans مع ASP.

    - أو -
  • إنشاء ملحق ISAPI لتحميل الملف.

    - أو -
  • استخدام FTP لتحميل الملف.
تصريح
يعتبر هذا السلوك حسب التصميم.
معلومات أخرى

خطوات إعادة إنشاء في سلوك

  1. في Microsoft Visual Basic .NET أو في Microsoft Visual C# .NET ، إنشاء مشروع "تطبيق ويب" جديد. افتراضياً، يتم إنشاء WebForm1.aspx.
  2. اسحب الكائن الزر من مربع الأدوات إلى WebForm1.aspx.
  3. انقر نقراً مزدوجاً فوق كائن الزر فتح الحدث انقر في "عرض رمز".
  4. قم بلصق التعليمة البرمجية التالية في الحدث Button1 النقر.

    رمز .NET Visual Basic
    	' Identify the file to download including its path.	Dim filepath As String = DownloadFileName	' Identify the file name.	Dim filename As String = System.IO.Path.GetFileName(filepath)	Response.Clear()		' Specify the Type of the downloadable file.	Response.ContentType = "application/octet-stream"	' Set the Default file name in the FileDownload dialog box.	Response.AddHeader("Content-Disposition", "attachment; filename=""" & filename & """")	Response.Flush()	' Download the file.	Response.WriteFile(filepath)

    رمز Visual C# لـ .NET
    	// Identify the file to download including its path.	string filepath = DownloadFileName;	// Identify the file name.	string filename = System.IO.Path.GetFileName(filepath);	Response.Clear();	// Specify the Type of the downloadable file.	Response.ContentType = "application/octet-stream";	// Set the Default file name in the FileDownload dialog box.	Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);	Response.Flush();	// Download the file.	Response.WriteFile(filepath);
  5. استبدال DownloadFileName اسم الملف أكبر من 100 ميغا بايت.
  6. من القائمة تصحيح ، انقر فوق ابدأ.
  7. انقر فوق Button1.
مراجع
لمزيد من المعلومات، انقر فوق أرقام المقالات التالية لعرضها في "قاعدة المعارف لـ Microsoft:
307603 كيفية كتابة الملفات الثنائية إلى المستعرض باستخدام ASP.NET و Visual Basic .NET
306654 كيفية كتابة الملفات الثنائية إلى المستعرض باستخدام ASP.NET و Visual C# .NET
لمزيد من المعلومات، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:
ملاحظة
منتجات الجهات الأخرى التي تمت مناقشتها في هذه المقالة تكون تابعة لشركات مستقلة عن Microsoft. لا تقدم Microsoft أي ضمان ، ضمنيًا أو صريحًا، بخصوص أداء أو ثبات النظام "من هذه المنتجات.

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 812406 - آخر مراجعة: 11/21/2007 18:22:50 - المراجعة: 4.3

Microsoft Web Services Enhancements for Microsoft .NET 1.1, Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

  • kbmt kbwebserver kbwebforms kbweb kbdownload kbprb KB812406 KbMtar
تعليقات
/html>html>