Webservice Dateiupload byte[] progressbar

CPoly

Mitglied Weizenbier
Hallo,

Ich habe einen Webservice laufen (.net(c#), soap), welcher eine Methode bereitstellt, um Dateien hochzuladen. Vereinfacht lautet die Signatur upload(byte[] b)
Jetzt konsumiere ich diesen Service in Java. Ich nutze NetBeans und habe mit einem Plugin aus der wsdl Datei Klassen erstellen lassen.
So weit funktioniert auch alles, aber natürlich hätte ich (und die späteren user) gerne eine Fortschrittsanzeige. Bis gestern habe ich meine eigene Klasse benutzt, welche den HTTP-SOAP-Request zusammensetzt und über einen Socket verschickt. Der Vorteil dabei war, da ich ja die Datei von Hand Stück für Stück in den Stream gesteckt habe, konnte ich einen Ladebalken mitlaufen lassen. Da es aber bequemer und mit Sicherheit performanter ist, bin ich jetzt von meiner eigenen Klasse weggegangen.
Die Frage ist jetzt: Wie kann ich bei einem javax.xml.ws.Service eine Aussage über den aktuellen Fortschritt machen?

Gruß
 
Hallo,

Du kannst vor dem Aufruf einen eigenen Thread starten und dort einen Counter jede Sekunde hochzählen, denn kannst du für den Ladebalken nehmen. Die Länge würde ich auf Grund der üblichen upload Zeit wählen. Falls er am Ende ist kannst du am Anfang wieder starten oder du wirst bei den letzten 10% immer langsammer und näherst dich mit immer kleineren Schritten am Ziel an. Übrigens, glaube ich kaum dass das Webservice schneller ist, als deine Implementierung. -> Bei Webservice ist in der Regel durch das Protokoll ein größere Latenz bzw. Verarbeitungszeit zu erwarten. Schöner ist es aber natürlich.

beste Grüße

CoachHerb
 
Danke für deine Antwort.
Deine Ansatz klingt aber leider zu sehr nach Windows-Ladebalken nach dem Motto "Wir zeigen dem User mal irgendeinen Balken an, der ungefährt stimmen könnte."
Wenn sich hier tatsächlich keine Lösung finden lässt, mit welcher ich exakt ermittelt kann, wie viele bytes schon übertragen wurden, muss ich wohl meine eigene Klasse wieder verwenden und diese so gut es geht optimieren. Mit deiner Lösung ist es auch nicht möglich die Geschwindigkeit anzuzeigen, denn du setzt ja vorraus, dass ich die Geschwindigkeit etwa kenne, um daraus abzuschätzen, wie lange es dauert. Meine Klasse allerdings erlaubt es festzulegen, dass alle n bytes eine Callback-Funktion aufgerufen wird. Ich kann also sagen "gib mir alle 100kb bescheid". Aus der Zeit zwischen den Calls kann ich die Geschwindigkeit ermitteln und ich kann genau errechnen wie viele byte noch fehlen.
 
Eine andere Möglichkeit gibt es nicht. Webservices sind für sowas nicht geeignet...du bräuchtest ein callback beim Webservice, ...

CoachHerb
 

Neue Beiträge

Zurück