Announcement

Collapse
No announcement yet.

Hässliche Exception in der Server-Anwendung (DCOM)

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

  • Hässliche Exception in der Server-Anwendung (DCOM)

    Hallo zusammen!

    Ich habe ein Server-Programm und ein Client-Programm entwickelt. Beide befinden sich auf

    unterschiedlichen Rechnern (Beide Windows 2000). Die Kommunikation zwischen den Rechnern

    basiert also auf der DCOM-Technologie. Es sind ausschliesslich diese beiden Rechner

    vernetzt.

    Ich habe mit hilfe des Automatisierungs-experten eine TLB-Datei generieren lassen. Diese

    habe ich in meinem Client-Programm eingebunden! Der Aufruf des Servers erfolgt mit der

    Funktion : RemoteControl:= CoAutoObject.CreateRemote(MasterPC).

    Wobei 'MasterPC' von mir auf dem Client-PC in der Hosts-Datei definiert
    wurde.
    '192.168.0.1 SERVER'.

    In dem Client habe ich dann eine Konstante definiert:
    const MasterPC = 'SERVER'

    Die Serveranwendung habe ich von dem Client-PC mit dem Zusatz: /regserver aufgerufen und ist somit registriert.

    Jetzt das Problem:
    Starte ich zuerst das Serverprogramm und anschliessend das Client-Programm auf dem anderen

    Rechner, funktioniert alles prächtig. Ich kann alle spezifizierten Komponenten fernsteuern.
    Starte ich allerdings zuerst das Client-Programm, so erzeugt dieses auf dem Server-PC den Prozess der Server-Anwendung. Beende ich nun den Zugriff (RemoteControl:= nil) dann erfolgt

    eine Exception auf dem Server-PC. Quittiere ich die Exception, verschwindet der Prozess dann schliesslich.

    Mein Ziel: Ich möchte das Client-Programm gerne solange in einer Warteschleife lassen bis die Serveranwendung auch wirklich gestartet ist.
    Versuche mit

    GetActiveObject(CLASS_AutoObject, nil, aSrvObj);

    if Assigned(aSrvObj) then

    begin

    RemoteControl:= aSrvObj as IAutoObject;

    end;

    tragen leider auch keinr Früchte. Ich nehme an weil der Prozess halt auf einem anderen Rechner läuft?!
    Das Client-Programm darf AUF GAR KEINEN FALL einen Prozess auf dem Server-PC starten, sondern darf sich lediglich aufschalten!

    Lange Rede kurzer Sinn: I need your help!

  • #2
    Schon mal Danke falls ihr euch die Mühe gemacht habt und über mein Problem nachgedacht habt!
    Die Lösung meines Problems lag schlicht und einfach in der Rechtevergabe (Wer darf die Anwendung starten --> dcomcnfg --> Netzwerk: Starten verweigern).
    Es wäre aber schön wenn jemand weiß wie man abfragen kann ob ein Remote-Object auf dem MasterPC schon instantiiert wurde.

    Vielleicht Herr Kosch? (Jeder wendet sich ja an den Buchautor wenn alle Stricke oder Threads? reissen)

    mfg
    Carste

    Comment


    • #3
      Hallo,

      nachdem die dot.net-Konferenz 2003 vorbei ist, komme ich wieder dazu, hier im FORUM vorbei zuschauen...

      >... wie man abfragen kann ob ein Remote-Object auf dem MasterPC schon instantiiert wurde.

      Die Grundidee von COM/DCOM liegt darin, dass das Betriebssystem automatisch das Objekt hochfährt, wenn ein Client einen Interface-Zeiger darauf abfordert. Wenn man "vorher" nachfragen will, geht das nur über ein gemeinsam genutztes Hilfsobjekt, das als "toter Briefkasten" genutzt wird: <br>
      a) Im Fall eines DCOM-Server (eigene EXE) würde ich für dieses Hilfsobjekt zum Singleton-Server greifen. <br>
      b) Im Fall eines MTS/COM+-Servers würde ich das Hilfsobjekt zum Zugriff auf den Shared Property Manager nutzen, um dort die gemeinsamen Informationen unterzubringen

      Comment

      Working...
      X