2010-02-24 1 views
5

In einem einfachen Windows-Setup haben wir einen COM-Singleton, der als Out-of-Process-Server ausgeführt wird.Was legt fest, wie lange ein COM-Server, der nicht mehr funktioniert, bemerkt, dass ein Client abgestorben ist?

Clients verbinden sich, indem sie cocreate aufrufen, und jeder erhält eine Schnittstelle zur selben Instanz des Servers.

Wenn Clients normal herunterfahren, geben sie ihre Referenzen frei.

Der Server hat ein bisschen Logik, die ihn für kurze Zeit nach dem letzten Release am Leben erhält, um neue Verbindungen zu ermöglichen.

Ich interessiere mich für einen speziellen Fall - der Server läuft mit nur einem Client, der abstürzt (betrachten Sie dies als einen beliebigen unbekannten Absturz) und der Client beendet, ohne seine Referenzen freigegeben zu haben.

Ich beobachte, dass der Server nach einer unbestimmten Zeit sagen 8 Minuten Freigabeaufrufe auf die Stubs von Objekten, die der Server Schnittstellen von dem Client zurückgegeben hat. Dies scheint eine automatische Bereinigung zu sein, von der ich annahm, dass sie von der LRPC-Schicht gestartet wurde.

Ist dies überall dokumentiert und ist das Timeout konfigurierbar?

Hinweis: Multithread-Apartment-Modell überall verwendet.

Antwort

6

Diese http://www.microsoft.com/msj/0398/dcom.aspx unter DCOM Garbage Collection scheint die dreimal verpasst werden muss, um anzuzeigen, dass DCOM eine 120-Sekunden-Timeout verwendet, wird der Client so ca. 6 Minuten getrennt betrachtet werden. Leider zeigt es auch an, dass es nicht vom Benutzer konfigurierbar ist und ich kann nichts finden, das das Gegenteil beweist.

+0

Dieser Link erwies sich als sehr nützlich - vielen Dank. – morechilli

Verwandte Themen