Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi DataSnap, unreliable Network, Wiederaufnahme der Verbindung (https://www.delphipraxis.net/161761-datasnap-unreliable-network-wiederaufnahme-der-verbindung.html)

hokuspokussimsalabim 19. Jul 2011 14:50

DataSnap, unreliable Network, Wiederaufnahme der Verbindung
 
Hallo...

ich spiele zur Zeit mit DataSnap herum (Delphi XE) und stoße dabei auf ein mehr oder weniger großes Problem.

Die Situation ist folgende: der Client hält einen Proxy mittels dem er Methoden des Servers aufruft. In einer unzuverlässigen Umgebung (bspw. WLAN) kann dies nun dazu führen, dass der Aufruf fehlschlägt (10054 o.ä.). Das wäre soweit kein Problem würde der nächste Aufruf, bei wieder bestehender Netzwerk-Verbindung, "durchgehen". Dies ist leider nicht der Fall. Lapidar dahingeschrieben, kann der Proxy anschliessend weggeworfen werden, ich habe adhoc keinen Weg gefunden ihn wieder dazu zu "überreden", mit dem Server zu kommunizieren. Zwar kann ich die Connection händisch schliessen und wieder neu öffnen, dies hat jedoch hinsichtlich der Clientsession (auf dem Server) Auswirkungen: diese steht nicht mehr zur Verfügung bzw. kann nicht mehr aufgenommen werden. Getestet habe ich als Protokolle sowohl TCP/IP als auch HTTP, KeepConnection mit True als auch False.

Gibt es einen Weg, dieses Verhalten (von DataSnap) mit hauseigenen Mitteln zu beeinflussen, ist dieses Verhalten "per Design" (ich kenne andere Remoting-Frameworks welche dieses Problem adäquat lösen) oder hat jemand vielleicht weitergehende Hinweise zu dem Thema?

Grüße
hokuspokussimsalabim.

hokuspokussimsalabim 20. Jul 2011 08:01

AW: DataSnap, unreliable Network, Wiederaufnahme der Verbindung
 
Ich "antworte" mir mal selber... bin gestern beim debuggen noch auf zwei interessante Klassen gestossen: TDBXCommunicationLayerFactory sowie TDBXHTTPLayer in der Unit DSHTTPLayer. Ich werde mir das mal näher ansehen und, falls Interesse besteht, hier weiteres dazu schreiben. Sollte aber jemand einen "offiziellen" Weg mein beschriebenes Problem anzugehen kennen, so ist Feedback weiterhin willkommen.

himitsu 20. Jul 2011 08:47

AW: DataSnap, unreliable Network, Wiederaufnahme der Verbindung
 
Eine Verbindung die getrennt wurde, ist halt getrennt und kann nicht mehr aufgenommen werden.
Wenn du irgendwelche sessionabhänige Daten benötigst, dann könntest du diese Daten selber verwalten, beim aufbau einer neuen verbindung schuen ob der Client vor Kurzem schonmal verbunden war und dann die "alten" Daten übernehmen ... ansonsten die Daten neu erstellen.


PS: Hab hier selber fast ein halbes Jahr gebraucht, um auch die letzteb Verbindungen halbwegs stabil hinzubekommen. :wall:

hokuspokussimsalabim 20. Jul 2011 11:39

AW: DataSnap, unreliable Network, Wiederaufnahme der Verbindung
 
Zitat:

Eine Verbindung die getrennt wurde, ist halt getrennt und kann nicht mehr aufgenommen werden.
Klar :) Ich wollte auch mehr darauf hinaus, dass die Session wieder "aufgenommen" wird.

Zitat:

Wenn du irgendwelche sessionabhänige Daten benötigst
Und genau da hatte ich gehofft, dass DataSnap hier einen "offiziellen" Weg vorsieht, dass ich eine Session, mit einer neuen Verbindung, wieder aufnehmen kann. Bei TCP/IP als Protokoll schon einmal keinesfalls, bei HTTP und HTTP/S wird beim ersten Call eine SessionId erzeugt und diese künftig vom Client mitgegeben. An dieser Stelle hoffte ich, ansetzen zu können. Aber wie sich zeigt ergeben sich da eine ganze Reihe weiterer Probleme.

Zitat:

schuen ob der Client vor Kurzem schonmal verbunden war
Und genau da beisst sich die Katze in den Schwanz. Woran "erkenne" ich den Client. Im Grunde genommen schlägst Du vor, eine Art zusätzliche Sessionverwaltung zu integrieren falls ich Dich nicht gänzlich mißverstehe.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz