asynchrone Webmethode
- From: Udo Schneider <UdoSchneider@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Sat, 9 Jun 2007 15:56:00 -0700
Hallo Newsgruppe!
Bin am Entwickeln eines Webservices.
Input:
Dieser Webservice empfängt vom Client (WinForm-Applikation)
eine Binärdatei (voraussichtlich vorallem *.wav oder *.mp3
oder *.tif oder *.pdf)
welche mehrere Dutzend Megabyte gross sein wird (die Datei und
deren Grösse ist bei jedem Aufruf der Webmethode eine andere).
Verarbeitung:
Diese Anfrage und die zugehörige Datei soll in eine Queue gestellt
werden (weil mehrere Clients solche Anfragen gleichzeitig stellen
können) und serverseitig soll dann eine Anfrage nach der anderen
Bearbeitet werden. Die eigentliche "Bearbeitung" ist eine sehr
zeitintensive Analyse der eingeschickten Binärdatei (welche mehrere
Stunden pro Datei in Anspruch nehmen kann).
Output:
Das aus der Analyse resultierende File (ebenfalls eine Binärdatei,
voraussichtlich ein *.doc) soll an den Client zurück.
Problem:
Ein "normaler" WebMethod-Aufruf (also synchron) kommt sicher nicht
in Frage, weil dann der Client mehrere Stunden blockiert ist, bzw.
die "Sanduhr" anzeigt.
Also dachte ich mir, den WebMethod-Aufruf asynchron zu machen.
So könnte zumindest die Client-Applikation weiterarbeiten. Dies ergibt
aber folgende Nachfolgeprobleme:
- Der User könnte inzwischen die Clientapplikation schliessen und dann
wären die Daten verloren, bzw. er müsste die Anfrage erneut starten.
- Der User will nach dem Einsenden der Datei die Clientapplikation
schliessen und (Stunden später) von einem anderen Computer aus
die Clientapplikation (die dort ebenfalls installiert ist) starten und vom
Webservice die Resultat-Binärdatei abholen.
Lösungsansatz:
Der Server (bzw. der Webservice) kann also nicht "aktiv" das Resultat
an den Client schicken (weil inzwischen vielleicht der Client nicht
erreichbar ist bzw. eine Firewall dies blocken würde), sondern der
Client muss den Server mit einer "Anfrage-ID" pollen und bekommt
dann entweder die Resultatdatei zurück oder aber die Antwort, dass
die Datei immer noch "in Status verarbeitung" ist.
Frage:
Mit welcher Technik ist sowas zu realisieren? Von einem Kollegen habe
ich die Antwort bekommen, dass sowas nicht gehe, weil Webservices
"vergesslich" seien und "Single-Call"-Technik einsetzen würden.
In einem Microsoft-Press Buch habe ich gelesen, dass man im Webservice
in einem separaten Thread eine Objekt-Liste (mit der erwähnten "Anfrage-
ID") speichern könne und auf diese Weise "ein Singleton simulieren"
könne (also quasi die Asynchronizität nicht clientseitig sondern serverseitig
implementiert).
Das klingt für mich genau nach dem richtigen Ansatz, aber leider finde
ich kein konkretes Sample oder weiterführende Literatur, welche diesen
Lösungsansatz an einem praktischen Beispiel erläutert.
Die Suche in Google oder MSDN bringt mal wieder nur einen Heuhaufen,
in welchem die gesuchte Nadel vielleicht irgendwo versteckt ist...
Wer kann helfen?
.
- Follow-Ups:
- Re: asynchrone Webmethode
- From: Helmholtz Ralf
- Re: asynchrone Webmethode
- From: Frank Dzaebel
- Re: asynchrone Webmethode
- Prev by Date: Re: Socketverbindung, senden, empfangen, synchron, Handshake, Grundlegende Fragen
- Next by Date: Re: <List> + ForEach
- Previous by thread: <List> + ForEach
- Next by thread: Re: asynchrone Webmethode
- Index(es):
Relevant Pages
|