بروتوكول نقل الملفات GetFileSize يلقي عشوائيا خطأ FTP 503 (تسلسل سيئة من أوامر)

StackOverflow https://stackoverflow.com/questions/446574

  •  22-07-2019
  •  | 
  •  

سؤال

للحصول على حجم ملف كل ملف في قائمة الملفات، أنا باستخدام التعليمات البرمجية التالية:

foreach (String f in files)
{
  UriBuilder ftpUri = new UriBuilder("ftp", ftpServer, -1, ftpPfadZuLogDateien + "/" + f);
  FtpWebRequest ftpclientRequest1 = (FtpWebRequest)WebRequest.Create(ftpUri.Uri);
  ftpclientRequest1.Method = WebRequestMethods.Ftp.GetFileSize;
  ftpclientRequest1.Credentials = new NetworkCredential(ftpLoginName, ftpPassword);
  FtpWebResponse response1 = (FtpWebResponse)ftpclientRequest1.GetResponse();
  long filesize = response1.ContentLength;
  response1.Close();
  // store the file size somewhere
}

إذا لا يوجد سوى عدد قليل من الملفات في القائمة، وهذا يعمل عادة. ولكن بعد بعض من هذه الطلبات (أحيانا 10 وأحيانا 100) على التوالي، GetResponse () سوف يرمي خطأ 503 (تسلسل سيئة من أوامر).

وماذا يحاول هذا الخطأ أن تقول لي؟ أنا الاستعلام سريع جدا؟ نسيان لتنظيف أي مورد منتديات وماذا يمكنني أن أفعل حيال ذلك؟

ومزيد من المعلومات:
وضع KeepAlive = كاذبة على الاتصال يجعلها تفشل في الطلب الثاني مع الخطأ 550 (ملف لم يتم العثور نفى / الوصول؟).
الإعداد UsePassive = كاذبة لم يتغير أي شيء.
الإعداد UseBinary = صحيح لم يتغير أي شيء.
ضرب رأسي على لوحة المفاتيح لم يتغير أي شيء.

و[تحديث] beckr.org قدمت جوابا - منذ كان مخفيا بعيدا وراء وجود صلة والكثير من النص، وهنا النص القصير: لقد غيرت المصدر، لذلك أود أن إعادة استخدام NetworkCredentials:

NetworkCredential myCredentials = new NetworkCredential(ftpLoginName, ftpPassword);
foreach (String f in files)
{
  UriBuilder ftpUri = new UriBuilder("ftp", ftpServer, -1, ftpPfadZuLogDateien + "/" + f);
  FtpWebRequest ftpclientRequest1 = (FtpWebRequest)WebRequest.Create(ftpUri.Uri);
  ftpclientRequest1.Method = WebRequestMethods.Ftp.GetFileSize;
  ftpclientRequest1.Credentials = myCredentials;
  FtpWebResponse response1 = (FtpWebResponse)ftpclientRequest1.GetResponse();
  long filesize = response1.ContentLength;
  response1.Close();
  // store the file size somewhere
}

وبهذه الطريقة كل شيء يعمل كما ينبغي.

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

المحلول

هل أثر استخدام يريشارك - رمز الحالة هو 503، ولكن الرسالة هي أكثر عرضة شيئا مختلفا. في حالتي، كان FtpWebRequest يتم إعادة مصادقة كل 3 طلبات أو نحو ذلك مع س ع ص المستخدم، والتي أسفرت عن الخادم (بروفتبد) الرد "503 يتم تسجيل دخولك بالفعل في"، والذي يسبب FtpWebRequest يتم إنقاذ. انظر ردود الفعل من قبل مايكروسوفت لماذا يحدث هذا في <لأ href = "http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/9f0510f9-fa39-4aa4-8bd5-afb926282144/" يختلط = " noreferrer نوفولو "> http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/9f0510f9-fa39-4aa4-8bd5-afb926282144/ . اذا كان (سليم) الأمور مفتوحة المصدر، وأود أن لا يكون لديك Microsoft مشكلة مع هذا الخطأ لأن أنا فقط يمكن أن إصلاح بنفسي، وتوفير التصحيح وسيكون على الأرجح الخوض في مزيد من الإصدارات. ولكن هذه ليست الطريقة التي تسير بها الأمور في مايكروسوفت. الآن النظر في http://sourceforge.net/projects/dotnetftpclient/ .

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