Announcement

Collapse
No announcement yet.

COM Interop - Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • COM Interop - Problem

    Hallo,

    bei meinen ersten C# - Gehversuchen scheitere ich an folgendem Problem: Ich möchte aus einer .Net Assembly heraus einen DCOM Server benutzen, der auf einem entfernten Server läuft. Das geht auch so weit über <B>Type.GetTypeFromCLSID </B> (unter Angabe des Servernamens) und darauffolgendem <B>Activator.CreateInstance</B>.

    Leider wird auf dem Server bei dem Aufruf eine neue Instanz des DCOM - Servers gestartet. Es sollte aber stattdessen eine bereits laufende Instanz des Servers benutzt werden.

    Versuche mit <B>Activator.GetObject</B> sind bisher fehlgeschlagen - mir ist auch nicht klar, ob GetObject hierfür überhaupt geeignet ist oder nur für Remoting.

    Weiß jemand Rat?

  • #2
    Ich bin mir nicht 100% sicher aber müstest du nicht auf dem Client zuerst einen Proxy installieren und dann Proxy Klassen vom Client aus ansprechen der dann den Aufruf an den Server weiterleitet? Ich weiss das man damals "vor langer Zeit" bei Delphi das direkt angeben konnte aber in .NET geht es meines Wissens nach nur über den Proxy

    Comment


    • #3
      Danke für die schnelle Antwort!

      Scheinbar klappt das unter .Net schon mit dem Aufruf eines Remote Servers - eben über späte Bindung. Das einzige Problem ist, daß auf dem Server-Rechner immer eine neue Instanz des DCOM Servers erzeugt wird, anstatt daß eine bereits laufende Instanz benutzt wird.

      Das Marshaling soll doch eigentlich der RCW übernehmen. Der DCOM Server ist auch auf dem Client - Rechner DCOM-seitig registriert, die (von der IDE automatisch erzeugte) Interop - Assembly existiert sowohl auf dem Client - Rechner als auch auf dem Server - Rechner...

      Vielleicht hab ich ja irgendwas übersehen

      Comment


      • #4
        Hallo,

        &gt;Es sollte aber stattdessen eine bereits laufende Instanz des Servers benutzt werden.

        welche Bedeutung hat "Instanz" in diesem Zusammenhang? Ist der Prozess der Server-EXE gemeint oder die Objektinstanz, die in diesem Server-Prozess ausgeführt wird. Wenn jeder DCOM-Client mit der gleichen Objektinstanz im gleichen Server-Prozess arbeiten soll, muss der DCOM-Server das so genannte Singleton-Prinzip implementieren.

        Letztendlich hängt es also von der Konfiguration des DCOM-Servers ab. Im Fall einer in C# geschriebenen .NET Enterprise Service-Anwendung (COM+) arbeiten alle über DCOM zugreifenden C#-Clients mit dem gleichen Prozess (DLLHOST.EXE), aber niemals mit der gleichen Objektinstanz innerhalb dieses Prozesses (da COM+ das Singleton-Prinzip nicht zulässt)

        Comment


        • #5
          Danke, die Antwort hat mir schonungslos meine löchrigen COM/DCOM Kenntnisse vor Augen geführt :-)

          Was ich wollte, war ein einziger Exe-Prozess, dessen einzige Objektinstanz die Anfragen der Reihe nach abarbeitet. Dazu habe ich jetzt den DCOM Server (ein Delphi DCOM Server) mit dem Threading Model tmSingle erzeugt und noch etwas "Feintunging" an der DCOM-Konfiguration betrieben, so daß es jetzt scheinbar funktioniert.

          Das erklärt natürlich auch, warum ich auf der .Net - Seite nichts gefunden habe, womit sich die Art und Weise der Erzeugung der Server-Objektinstanzen hätte beeinflussen lassen

          Comment

          Working...
          X