Announcement

Collapse
No announcement yet.

Benutzer , COM+, CriticalSections

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

  • Benutzer , COM+, CriticalSections

    Hallo!
    Ich habe einen Benutzer angelegt unter dem mein Com-Server laufen soll. Dieser Benutzer ist in der Gruppe der Hauptbenutzer.
    Da mehrere Leute auf den Server zugreifen benutze ich critical-sections um keine Konflikte bei meinem Datenbankzugriff zu haben. Eine Schutzverletzung tritt auf, sobald die Enter Methode aufgerufen wird. Wenn ich den Benutzer der Gruppe der Admins zuweise klappt alles einwandfrei.
    Welche Rechte muss ein User haben, damit es mit Critical-Sections funktioniert ?
    Danke
    Sascha

  • #2
    Mittlerweile hab ich rausbekommen, dass mein User wohl keinen Zugriff auf die Registrierung(Local_Machine) hat und dadurch wird auch keine critical-section angelegt. D.h. weil meine ausgelesen Werte '' sind kommt er gar nicht an den Punkt wo er die Instanz für die Critical Section erzeugt. Ich hatte den Fehler woanders vermutet, weil wenn ich mich normal anmelde kann der Benutzer diese Werte lesen und sogar schreiben.
    Warum kann ein Benutzer unter dem der DLLHost läuft nicht die Registrierung auslesen

    Comment


    • #3
      Hallo,

      so richtig verstehe ich das Ganze nicht. Microsoft hat doch COM zu COM+ "veredelt", damit sich der Entwickler nicht mehr selbst um die Synchronisierung (Critical Sections) kümmern muss. Wenn eine COM+-Objektinstanz (MTA) immer nur von einem einzigen Benutzer gleichzeitig aufgerufen werden darf, kann dies über die Eigenschafts-Option <i>Synchronisierungsunterstützung = Erforderlich</i> des COM+-Objekts erreicht werden (das Betriebssystem schaltet dann bei Bedarf automatisch einen Mutex zur Synchronisierung dazwischen). Alternativ dazu könnte man das COM+ Objekt in den Pool legen und die maximale Poolgröße auf 1 setzen - auch dann müssen sich alle Clients bei ihren Aufrufen automatisch in einer Reihe anstellen.

      Der Zugriff auf die Registry ist ein Performance-Killer. COM+ stellt über den <i>Shared Property Manager</i> eine extrem schnelle und threadsichere Schließfachanlage zur Verfügung, in der mehrere COM+ Instanzen gemeinsame Daten ablegen können.

      Nutzt das COM+ Objekt JITA (Just-In-Time-Activation)

      Comment


      • #4
        Hallo!
        In der Registry hatte ich Werte gespeichert, mit Pfaden zu Binärdateien, die mein Objekt benötigt. Nun habe ich die aus der Registrierung ausgeschmissen und in einer INI-Datei gespeichert. Das Ganze wird nur im initialization Abschnitt ausgelesen und funktioniert nun ganz gut.
        Irgendwie bin ich wenig verwirrt. Das COM-Object ist ein Singlethreadapartment, also ein STA. Da habe ich die Einstellungen des Delphi-Assistenten nicht erändert. Meine Datenbankzugriffe hatten beim Mehrbenutzerzugriff Fehler verursacht, deswegen hatte ich sie in Critical-Sections eingeschlossen.
        Das COM+ Objekt benutzt JITA.

        MFG
        Sasch

        Comment


        • #5
          Hallo,

          &gt;Meine Datenbankzugriffe hatten beim Mehrbenutzerzugriff Fehler verursacht...

          bei einem an sich "narrensicheren" STA kann so etwas nur passieren, wenn grundlegende Fehler in der Implementierung des COM+-Objekts gemacht wurden. Wie sieht ein <b>Minimal-Beispiel</b> aus, mit sich dieser Effekt jederzeit reproduzieren lässt

          Comment


          • #6
            Ein Minimal-Beispiel habe ich im Moment nicht. Ich denke jedoch das es an meinen globalen TTable-Objekten liegt

            Comment

            Working...
            X