Laden...

DCOM Verbindung

Erstellt von hansen vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.801 Views
H
hansen Themenstarter:in
7 Beiträge seit 2005
vor 18 Jahren
DCOM Verbindung

Hallo.

Ich habe eine Anwendung (Server) der auf einem Remote- PC läuft. Der Server darf nur einmal gestartet werden. Wenn der Server nicht läuft und ich starte meinen Client, dann wird der Server auf dem Remote PC gestartet und es läuft alles wie es soll.
Wenn ich nun meinen Client beende wird die Verbindung am Server getrennt, der Server bleibt gestartet. Soweit ist alles ok.
Wenn ich nun aber meine Client erneut starte, dann wird versucht auf dem Remote PC einen zweite instanz des Servers zu starten, da dies nicht erlaubt ist wird dieser prozess auf dem Server beendet und ich bekomme eine Fehlermeldung.
Nun meine Frage. Wie kann ich mich mit einem laufenden Prozess verbinden?
Ich habe schon mit Activator.GetObject probiert. Dies hat aber nich funktioniert. 😦

Mein Code:

			
Type dcomType = Type.GetTypeFromCLSID(guid, ComputerName, false);
Object dcomObj = null;
dcomObj = Activator.CreateInstance(dcomType);

Habe schon herausgefunden, dass wenn der server auf singelton eingestellt ist, es funktionieren sollte. Nur kann ich am Server leider nichts ändern 😦
Mit Delphi funktioniert es auch so. Möchte es aber in .net machen

Bin für jede hilfe dankbar.

Danke,

Hansen

3.728 Beiträge seit 2005
vor 18 Jahren
Transaction Server / COM+

Wenn der DCOM-Server im Microsoft Transaction Server (NT 4.0) oder als COM+ Applikation läuft, kannst Du diese Einstellung über den MSTS/COM+ Katalog ändern. Unter Windows 2000/XP findest Du diesen in der Systemsteurung im Ordner Verwaltung, Symbol Komponentendienste. Unter NT 4.0 in der Transaction Server Konsole.

Ansonsten, wäre es hilfreich, den Delphi-Code zu posten, mit dem es funktioniert. Das DCOM-Protokoll verhält sich bei .NET bestimmt5 nicht anders. Man muss bestimmt nur die richtige Einstellung finden.

H
hansen Themenstarter:in
7 Beiträge seit 2005
vor 18 Jahren

Es funktioniert jetzt bei mir. Allerding verwende ich einen kleine Trik.
Ich habe in Delphi eine Dll gemacht die zwei Parameter (GUID und RemoteComputerName) übernimmt. In dieser Funktion rufe ich die Delphi Funktion CreateComObject auf. Diese hat ebenfalls diese zwei Parameter. Intern verwendet diese Funktion die API Funktion CoCreateInstaceEx. Als Rückgabe dieser Funktione habe ich eine IUnknown Schnittstelle.
Ich habe dies Funktion dann über DLLImport in dot net eingebunden. Nun funktioniert alles so wie es funktionieren soll.
Habe den Sourcecode jetzt leider nicht auf diesem Rechner auf dem ich jetzt bin.
Werde in dann später posten.

mfg.
Hansen