asynchrone Webmethode



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?

.



Relevant Pages

  • Re: asynchrone Webmethode
    ... Dieser Webservice empfängt vom Client (WinForm-Applikation) ... Diese Anfrage und die zugehörige Datei soll in eine Queue gestellt ... Webservice die Resultat-Binärdatei abholen. ...
    (microsoft.public.de.german.entwickler.dotnet.csharp)
  • Typisierte Datasets
    ... Ich habe einen Webservice in dem ich ein typisiertes Dataset erstellt habe. ... Dieses liegt nund als .xsd Datei in meinem Webservice Projekt. ... Wenn ich nun dieses Dataset in meinen Client kopiere und mit einer neuen ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: WSE352 Size of the record exceed its limit
    ... The webservice is a WSE service component soap client. ... you're developing an .net webservice which uses WSE ...
    (microsoft.public.dotnet.framework.webservices)
  • RE: Error on SOAP Call on only one machine: Could not find default endpoint element that references
    ... "Service Reference" is a proxy class used for consuming WCF service. ... Though WCF client can also consume standard XML webservice, ... Microsoft MSDN Online Support Lead ...
    (microsoft.public.dotnet.languages.vb)
  • Re: Webservice problem (after iisreset)
    ... I was speaking about whatever means you're suing the make the call from the client. ... If it already waits one minute for the failure then it sounds like the timeout is already high enough. ... So use wsdl.exe to generate a .NET proxy to your webservice to see if that style of client has the same problems or not. ... If it does, then it sounds like something on the server, if it does not then it's likley your HTC framework. ...
    (microsoft.public.dotnet.framework.aspnet.webservices)