DCOM-Verwirrung

Tech-Archive recommends: Fix windows errors by optimizing your registry

From: Meier Rudolf (meiru_at_gmx.net)
Date: 10/30/04


Date: Sat, 30 Oct 2004 14:23:22 +0200

Hallo

Ich habe eine DCOM-Anwendung geschrieben, bei der es mehrere Dienste gibt.
Beim start melden sich alle Dienste beim Katalog an (auch ein Dienst) und
zwar indem sie eine Funktion "RegisterXY(IMyInterface* interf)" aufrufen.
Der Katalog kopiert danach diesen Schnittstellenzeiger in eine Liste, indem
er QueryInterface darauf aufruft. Ich weiss nicht wie gut so ein Verfahren
überhaupt ist, weil es durch das anpingen ja zu etwas Netzverkehr führen
wird, wenn der Server seine Schnittstelle jeweils prüft... aber gut,
theoretisch müsste sowieso alle paar Sekunden eine Kommunikation
stattfinden.
Das Problem ist nun aber, dass die einzelnen Dienste beim Schliessen ein
"Unregister" aufrufen. Darauf gibt der Katalog die Schnittstelle wieder frei
und der Server kann terminieren (wenn alle Schnittstellen zurückgegeben
worden sind). Das klappt aber nicht... na ja... nicht ganz wie gewollt.

Ich habe festgestellt, dass z.B. bevor RegisterXY aufgerufen wird, bereits 2
mal QueryInterface auf den Server ausgeführt wird, wenn der Katalog das
aufruft (erfolgreich), jedoch kein QueryInterface beim Server erfolgt. Nach
dem Abbau der Verbindung und dem Aufruf von Release, dauert es dann auch ca.
2 - 3 Minuten, bis das überhaupt bis zum Server durchkommt...

Ich nehme nun an, dass es daran liegt, dass DCOM da einfach ein laaaanges
Weilchen wartet, bis es QueryInterface, AddRef und Release wirklich
zustellt... was kann man dagegen tun? Kann man das beschleunigen? -> sonst
dauert das runterfahren des Servers immer ziemlich lange...

Oder hat jemand Dokumentationen dazu, wie genau das geregelt ist in DCOM?
COM+ ... oder was auch immer für ein Dienst dahinter steckt? Ich möchte
(wenn ich das nicht ändern kann) zumindest wissen, wie genau das geregelt
ist.

danke
MR