Nahrát binární data s Silverlight 2B2

hlasů
4

Snažím se nahrát soubor nebo tok dat na náš webový server a nemůžu najít slušné způsob, jak to udělat. Zkoušel jsem oba WebClienta WebRequestoba mají své problémy.

Webový
Pěkné a snadné, ale nemusíte dostat žádné oznámení, že asynchronní nahrávání splnil, a UploadProgressChangedudálost doesnt zavolá zpět s ničím užitečným. Alternativou je převést binární data na řetězec a použít UploadStringASync, protože pak alespoň dostanete UploadStringCompleted, problém je, budete potřebovat hodně paměti RAM pro velké soubory, jako jeho kóduje všechna data a nahrát ji na jeden zátah.

HttpWebRequest
trochu složitější, ale stále dělá to, co je potřeba, problem jsem dostat je, že i když to je voláno na pozadí nit (údajně), přesto se zdá, že blokuje můj UI a celý prohlížeč, dokud dokončení nahrávání, který doesnt se zdají docela správně.

Normální .net nemá nějaké vhodné WebClientmetody pro OnUploadDataCompleted a pokroku, ale ty aréna k dispozici v Silverlight .net ... big opomenutí Myslím, že!

Má někdo nějaké řešení, musím nahrát více binární soubory přednostně s pokrokem, ale musím provést některé akce, pokud jsou soubory dokončily upload.

Můžete se těšit na nějakou pomoc s tím.

Položena 15/08/2008 v 20:37
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
1

Způsob, jakým jsem si kolem něj je přes INotifyPropertyChanged a oznamování událostí.

Základy:

 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");
            }
        }

Právě teď Silverlight je Pita, protože dvojitých a trojitých asynchronní volání.

Odpovězeno 15/08/2008 v 21:17
zdroj uživatelem

hlasů
0

To bylo přesně to, co jsem dělal, že problém byl jsem stále byl, že moje UI byl stále pod zámkem.

Jak jste navrhl, co jsem dělal už jsem předpokládal problém byl někde jinde, takže jsem použil starý rozděl a panuj zúžit problém a nebyl to skutečný aktualizace kódu, to byl můj pokus odeslat žádost o aktualizaci můj progress bar během nahrávání toku kódu.

Díky za radu.

Odpovězeno 16/08/2008 v 00:01
zdroj uživatelem

hlasů
0

Díky, problém vidím u článku je, že to není mluvit o Silverlight a Silverlight má omezené funkce, z nějakého důvodu, že jste odstranili některé nezbytné události a metod pro binární převody bezdůvodně.

Musím použít Silverlight, jak musím / chci nahrát více souborů a HTML neumožňuje hromadné nahrání souboru.

Odpovězeno 15/08/2008 v 20:56
zdroj uživatelem

hlasů
0

Matt Berseth měl nějaké myšlenky na to, by mohl pomoci:

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

@Dan - Omlouvám se kamarád, já Coulda přísahal Mattova článek byl o Silverlight, ale není to zcela jasně není. Můžou za to ty dvě velké sklenice chilské červené Jen jsem sestřelil. :-)

Odpovězeno 15/08/2008 v 20:44
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more