Hallo zusammen,
ich habe eine kleine Client Server Anwendung programmiert. Server und Client laufen auf verschiedenen Computern.
Der Server Stellt in seiner TLB ein Interface zur verfügung welches einen Ping Aufruf besitzt. Der Client Pingt den Server über diesen Aufruf alle 100 ms.
Wenn ich den Server im Taskmanager nun terminiere, bekommt der Client eine Exception und connected neu.
Anders sieht es aus wenn ich am Client den Netzwerkstecker ziehe. Ich warte so lange bis der Client ins Except läuft, und stecke dann wieder ein.
Nach zwei Thread durchläufen connected der client sich wieder und meldet "Online".
Allerdings habe ich für jedes mal Netzwerkstecker ziehen eine EventSink mehr in meiner Serverseitigen SinkList.
Jede dieser N Sinks scheint gültig zu sein - löst in obiger procedure kein except aus. Der Client erhält ein und den selben Event jetzt N fach.
Das Verhalten ist reproduzierbar. Für jedes mal Netzstecker ziehen einen Eintrag mehr in der EventSink.
Weiß jemand Abhilfe? Ich bin am verzweifeln...
Habe auch schon in Herrn Kosch's Buch nachgeschlagen und leider keine Lösung gefunden.
Anmerkung:
Server und Clients setzen vor dem Application.Initialize Coinitflags:=0 und IsMultiThread:=true.
Das Objekt in den Clients steht auf ckRemote.
Serverseitig ist das Objekt mit ciMultiInstance und tmBoth initialisiert.
Vielen Dank für eure Hilfe.
ich habe eine kleine Client Server Anwendung programmiert. Server und Client laufen auf verschiedenen Computern.
Der Server Stellt in seiner TLB ein Interface zur verfügung welches einen Ping Aufruf besitzt. Der Client Pingt den Server über diesen Aufruf alle 100 ms.
Code:
myServerObj:TServerObjekt; [...] repeat try myServerObj1.Ping except myServerObj.Disconnect; sleep(1000); myServerObj1.Connect; end; sleep(100); until self.Terminated
Anders sieht es aus wenn ich am Client den Netzwerkstecker ziehe. Ich warte so lange bis der Client ins Except läuft, und stecke dann wieder ein.
Nach zwei Thread durchläufen connected der client sich wieder und meldet "Online".
Allerdings habe ich für jedes mal Netzwerkstecker ziehen eine EventSink mehr in meiner Serverseitigen SinkList.
Code:
procedure TServerObjekt.DoSendEvent(Msg:String); var EventSink:IServerObjektEvents; i:integer; begin i:=0; while i<=FConnectionPoint.SinkList.Count -1 do begin EventSink:=IUnknown(FConnectionPoint.SinkList.Items[i]) as IServerObjektEvents; try EventSink.OnChatMessage(Msg); except FConnectionPoint.SinkList.Items[i]:=nil; //Diese Sink Entfernen end; end; FConnectionPoint.SinkList.Pack; end;
Das Verhalten ist reproduzierbar. Für jedes mal Netzstecker ziehen einen Eintrag mehr in der EventSink.
Weiß jemand Abhilfe? Ich bin am verzweifeln...
Habe auch schon in Herrn Kosch's Buch nachgeschlagen und leider keine Lösung gefunden.
Anmerkung:
Server und Clients setzen vor dem Application.Initialize Coinitflags:=0 und IsMultiThread:=true.
Das Objekt in den Clients steht auf ckRemote.
Serverseitig ist das Objekt mit ciMultiInstance und tmBoth initialisiert.
Vielen Dank für eure Hilfe.
Comment