تحميل البيانات الثنائية مع سيلفرلايت 2b2

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

  •  08-06-2019
  •  | 
  •  

سؤال

أنا أحاول تحميل ملف أو تيار من البيانات إلى خادم الويب لدينا وأنا غير قادر على العثور على طريقة لائقة من القيام بذلك.لقد حاولت كل من WebClient و WebRequest على حد سواء لديهم مشاكلهم.

WebClient
لطيفة وسهلة ولكن كنت لا تحصل على أي إشعار غير متزامن تحميل أكملت ، UploadProgressChanged الحدث لا تحصل على استدعائه مع أي شيء مفيد.البديل هو تحويل البيانات الثنائية إلى سلسلة واستخدام UploadStringASync لأن ثم على الأقل تحصل على UploadStringCompleted, المشكلة هو أنك تحتاج إلى الكثير من ذاكرة الوصول العشوائي للملفات الكبيرة مثل ترميز جميع البيانات و تحميلها دفعة واحدة.

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

عادي .صافي لديها بعض المناسبة WebClient طرق OnUploadDataCompleted والتقدم ولكن هذه ليست متوفرة في سيلفرلايت .صافي ...كبير إغفال أعتقد!

هل من أحد لديه أي حلول لا تحتاج إلى تحميل عدة ملفات ثنائية ويفضل مع التقدم ولكن لا تحتاج إلى تنفيذ بعض الإجراءات عند الملفات الانتهاء من التحميل.

نتطلع إلى بعض المساعدة في هذا.

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

المحلول

طريقة الحصول على من حوله من خلال INotifyPropertyChanged و إعلام الحدث.

الأساسيات:

 public void DoIt(){
this.IsUploading = True;    

        WebRequest postRequest = WebRequest.Create(new Uri(ServiceURL));

        postRequest.BeginGetRequestStream(new AsyncCallback(RequestOpened), postRequest);
    }

private void RequestOpened(IAsyncResult result){
      WebRequest req = result.AsyncState as WebRequest;
   req.BeginGetResponse(new AsyncCallback(GetResponse), req);
    }

  private void GetResponse(IAsyncResult result)
        {
            WebRequest req = result.AsyncState as WebRequest;
              string  serverresult = string.Empty;
              WebResponse postResponse = req.EndGetResponse(result);

              StreamReader responseReader = new StreamReader(postResponse.GetResponseStream());

this.IsUploading= False;
}

 private Bool_IsUploading;
        public Bool IsUploading
        {
            get { return _IsUploading; }
          private  set
            {

                _IsUploading = value;

                OnPropertyChanged("IsUploading");
            }
        }

الآن سيلفرلايت هو بيتا بسبب مزدوجة وثلاثية المتزامن المكالمات.

نصائح أخرى

شكرا, المشكلة أنني يمكن أن نرى مع هذه المادة هو أن لا أتحدث عن سيلفرلايت ، سيلفرلايت وظائف محدودة ، لسبب ما لديهم إزالة بعض الأحداث وطرق الثنائية التحويلات بدون سبب.

أنا بحاجة إلى استخدام Silverlight كما أريد/ترغب في تحميل عدة ملفات HTML لا السماح متعددة تحميل الملف.

مات Berseth بعض الأفكار في هذا ، قد تساعد:

http://mattberseth.com/blog/2008/07/aspnet_file_upload_with_realti_1.html

@دان - أعتذر يا صديقي ، لقد كان اليمين الدستورية المادة مات كان عن سيلفرلايت, لكنه من الواضح تماما لا.اللوم على هذين نظارات كبيرة من التشيلي الأحمر لقد اسقطت.:-)

هذا كان إلى حد كبير ما كانت تقوم به ، المشكلة أنا كان الحصول على كان أن واجهة المستخدم كان يحبس

كما اقترحت ماذا كنت أفعل من قبل, انا المفترضة كانت المشكلة في مكان آخر لذلك أنا استخدمت القديمة "فرق تسد" إلى تضييق نطاق المشكلة و لم يكن الفعلية تحديث رمز ، كان محاولة إرسال طلب تحديث شريط التقدم أثناء تحميل تيار رمز.

شكرا على النصيحة.

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