Re: Response blockieren



Hallo,

Der Ablauf ist wie folgt:
Ein Client sendet einen Request an den Webserver. Zum Beispiel durch Drücken
eines Buttons auf der Seite.
Der Eventhandler dazu veranlasst eine Controll-Klasse dazu eine Nachricht an
einen Linux-Rechner zu schicken.
Dazu haben wir ein asynchrones TCP Interface geschrieben. Damit wäre der
Prozess erst einam beendet.
Der Linuxrechner hat jetzt erst einaml etwas zu tun....
Danach sendet der Linuxrechner eine Nachricht an den Windows-Sever. Über die
TCP Schnittstelle kommt diese dann an und wird an
die zentralle Kontrollklasse geschickt.
Und jetzt würde ich gerne die Webseite-Klasse informieren, dass der Response
raus darf. (nachdem die Seite mit den Daten aktualisiert wurde)
Mein Problem ist, dass sobald der Eventhandler für den Button durchlaufen
ist der Response automatisch raus geht.
Ich hab auch schon eine asynchrone Page implementiert, damit sie auf den
Callback von der Controll-Klasse wartet.
Da aber mein Prozess in der Zwischenzeit komplett unterbrochen ist
funktioniert das alles nicht.

Grüße
Stephan

"Günter Prossliner" wrote:

Hallo Stephan!

die Abfrage wird auf einem entfernten Rechner innerhalb einer
verteilten Anwendung laufen gelassen. Die Antwort kommt dann
asnychron über einen TCPHandler wieder rein.

Wenn ich das richtig verstehe, ist also eine weitere Schicht dazwischen.

Wie ist diese dann implementiert? Was bekommst Du von der Methode, welche
den DB-Command startet denn zurück? Sollte ein IAsyncResult sein.

Ich kann also nicht in
der gleichen Methode synchron auf das Ergebnis warten.

Warum nicht?

IAsyncResult ar = StartMethode(....);
ar.AsyncWaitHandle.WaitOne();

Am besten wäre es wenn ich den Response der
page unterdrücke

Was meinst Du mit "Response unterdrücken"? Die Response muss auf jeden Fall
warten bis alle Daten für den Request da sind.

und dann müsste die verarbeitende Klasse einen Event
auf der Page auslösen, dass gensendet werden darf.

Das "Senden" ist ja ein Antworten auf ein Anfrage (eben Request-Response).
Unter HTTP ist es nunmal so: Der Client setzt einen Request ab, dieser wird
am Server verarbeitet, und die Antwort darauf in den TCP-Stream geschieben.
Der Server baut ja keine Verbindung zum Client auf um die Response zu
schreiben.

Für asycnrone Benachrichtigungen hat man mit HTTP eben genau zwei
Möglichkeiten:
1. Warten bis Ergebniss (eventuell in einem unsichtbaren Request (hidden
frame, ajax))
2. Pollen auf Status (wieder ggf. unsichtbar mit genannten Methoden)


mfg GP



.