Frage

Ich versuche, eine Datei hochladen oder streamen von Daten an unseren web-server, und ich kann nicht finden, eine anständige Weg, dies zu tun.Ich habe beide ausprobiert WebClient und WebRequest beide haben Ihre Probleme.

WebClient
Einfach und schön, aber Sie nicht erhalten die Benachrichtigung, dass die asynchrone upload abgeschlossen ist, und die UploadProgressChanged Ereignis nicht aufgerufen werden, wieder mit etwas nützliches.Die alternative ist die Umwandlung von binären Daten in eine Zeichenfolge und verwenden UploadStringASync weil dann zumindest bekommen Sie ein UploadStringCompleted, problem ist, dass Sie brauchen viel Speicher für große Dateien, wie seine Kodierung der Daten und das hochladen ein.

HttpWebRequest
Etwas komplizierter, aber immer noch das tut, was nötig ist, problem ich bin immer ist, dass, obwohl es ist namens auf einem hintergrund-thread (angeblich), es scheint immer noch zu sein, Sperrung meiner Benutzeroberfläche und der ganze browser, bis der upload abgeschlossen ist, das scheint nicht ganz richtig.

Normal .net hat einige entsprechende WebClient Methoden für die OnUploadDataCompleted und Fortschritte, aber diese arent zur Verfügung, die in Silverlight .net ...große Unterlassung, die ich denke!

Hat jemand irgendwelche Lösungen, die ich hochladen müssen mehrere binäre Dateien vorzugsweise mit einem Fortschritte, aber ich brauche, um einige Aktionen, wenn die Dateien abgeschlossen hochladen.

Freue mich auf etwas Hilfe mit diesem.

War es hilfreich?

Lösung

Die Art, wie ich es umgehen, ist durch die INotifyPropertyChanged-und event-Benachrichtigung.

Das wesentliche:

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

Jetzt silverlight ist eine PiTA, weil die Doppel-und dreifach-Async-Aufrufe.

Andere Tipps

Danke, problem ich kann sehen, mit dem Artikel ist, dass Ihr nicht reden, Silverlight und Silverlight verfügt über eingeschränkte Funktionen, für einige Grund, warum Sie entfernt haben einige notwendige Ereignisse und Methoden für binäre übertragungen ohne Grund.

Muss ich Silverlight verwenden, wie ich brauche/möchte mehrere Dateien hochladen und HTML nicht erlaubt, für mehrere Datei-upload.

Matt Berseth ' hatte einige Gedanken in diese, die helfen könnten:

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

@Dan - Entschuldigung mate, I coulda sworn Matt Artikel war über Silverlight, aber es ist ganz klar nicht.Schuld es auf den zwei großen Gläsern Chilenischer rot ich gerade abgeschossen.:-)

Das war ziemlich viel, was ich Tat, war, das problem, das ich bekam, war, dass meine Benutzeroberfläche war immer verschlossen.

Wie Sie vorgeschlagen, was ich Tat, schon, ich vermutete, das problem lag woanders, so habe ich die alten Teile und Erobere, um das problem einzugrenzen, und es war nicht der eigentliche update-code, es war mein Versuch Versand eine Anforderung zum aktualisieren mein Fortschrittsbalken während der upload-stream code.

Vielen Dank für die Ratschläge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top