الحصول على Roundelength للحصول على تحميل HttpWebRequest من WebFile آخر للدفق في التحميل عندما لا يقوم المصدر بتنفيذ الطول المحتوي؟

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

سؤال

خلفية - أحاول دفق صفحة الويب الحالية على تطبيق ويب منفصل، باستخدام httpwebrequest / httpwebresponse في C #. قضية واحدة أنا ملفتة لافتة للنظر أنها أحاول ضبط طول محتوى تحميل الملفات عند طول محتوى محتوى تنزيل الملفات، ولكن يبدو أن المشكلة تبدو عندما تكون صفحة الويب المصدر على خادم الويب الذي لا يقوم به httpwebresponse توفير طول المحتوى.

HttpWebRequest downloadRequest = WebRequest.Create(new Uri("downloaduri")) as HttpWebRequest;
 using (HttpWebResponse downloadResponse = downloadRequest.GetResponse() as HttpWebResponse)
 {
   var uploadRequest = (HttpWebRequest) WebRequest.Create(new Uri("uripath"));
   uploadRequest.Method = "POST";
   uploadRequest.ContentLength = downloadResponse.ContentLength;  // ####

سؤال: كيف يمكنني تحديث هذا النهج لتلبية هذه الحالة (عندما يكون استجابة التنزيل ليس لديه مجموعة طول المحتوى). هل سيكون ذلك في استخدام مخصص بطريقة ما ربما؟ سيكون موضع تقدير أي رمز عينة.

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

المحلول

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

الجانب السلبي لهذا هو أنك سوف تأخذ الكثير من الذاكرة إذا كان ملف كبير. هل من المحتمل أن تكون مشكلة في وضعك؟ بدائل تشمل:

  • الكتابة إلى ملف بدلا من استخدام MemoryStream. وبعد ستحتاج إلى تنظيف الملف بعد ذلك، بالطبع - أنت تستخدم أساسا نظام الملفات كذاكرة أكبر :)
  • باستخدام ترميز نقل مبرز إلى "قراءة قطعة، اكتب قطعة"؛ هذه مايو كن fiddly للحصول على الحق - إنه بالتأكيد ليس شيئا قمت به من قبل.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top