Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: wittmann_franz am 11.01.12 - 12:23:28
-
Hallo zusammen,
ich habe ein Problem mit einem Agenten, welches sich mir überhaupt nicht erschließt.
Wir signieren Agenten in der Regel mit einem SuperUser.
Das funktioniert überall super außer in diesem Fall:
Um die Agenten nur einmal laufen zu lassen, haben wir vor dem eigentlichen Code eine Abfrage geschrieben, die festlegt ob der Agent überhaupt laufen soll. Das funktioniert nur leider nicht, wenn unser SuperUser den Agenten signiert hat. Er ruft trotzdem das doWork auf, obwohl er vorher das Script verlassen soll. Läßt man die Signatur stehen und trägt unter der Agenten-Sicherheit "Ausführen im Namen von" einen anderen Administrator ein, läuft der Agent so wie er soll.
Ich habe bereits den Abschnitt Sicherheit im Serverdokument bzgl. der beiden User verglichen und keine Unterschiede feststellen können.
Hat irgendjemand eine Idee, wo ich noch drehen muss?
Server 8.5.2
Client 8.5.2
Vielen Dank für Eure Hilfe
%REM
Agent Mail-In Dokumente verarbeiten CLU
Erstellt
am: 06.01.2012
von:
Beschreibung: Clusterfhähigkeit durch Function doWork
%END REM
Option Public
Option Declare
Use ".AppAuftragMailClass"
Sub Initialize
Const ADMINSRVDEFAULT = "Mein Server"
Dim sn As New NotesSession
Dim testdb As New NotesDatabase("", "")
Dim AdminSRV As String
Dim nAdminSRV As NotesName
Dim ExecSRV As String
Dim thisdb As NotesDatabase
Dim acl As NotesACL
Set thisdb = sn.CurrentDatabase
ExecSRV = thisdb.Server
Set acl = thisdb.ACL
Set nAdminSRV = sn.Createname(acl.AdministrationServer)
AdminSRV = nAdminSRV.Canonical
If AdminSRV = "" Then
AdminSRV = ADMINSRVDEFAULT
Else
End If
If ExecSRV = AdminSRV Then
Call doWork ()
Else
If testdb.open(AdminSRV, "names.nsf")Then
GoTo Ausgang
Else
Call doWork ()
End If
End If
Ausgang:
End Sub
%REM
Function doWork
Beschreibung: Hier steht der eigentliche Code des Agenten
%END REM
Function doWork
Dim objErrorContainer As ErrorContainer
Dim objProtocol As Protocol
Print "Function DoWork gestartet"
Call ProcessMail (objProtocol, False, objErrorContainer)
If Not objErrorContainer Is Nothing Then
If objProtocol Is Nothing Then
Call objErrorContainer.Send(Nothing)
Else
Call objErrorContainer.Send(objProtocol.NotesDocument)
End If
End If
End Function
-
Hi,
was sagt denn der Debugger zu den entsprechenden Inhalten?
-
Ach ja richtig, ich vergass....
der Debugger trägt in die Werte alles richtig ein und geht auch aus dem Script heraus.
Wenn jedoch der Agent über die Serverconsole per tell amgr run usw. oder per Zeitplan gestartet wird, springt das doWork nachwieslich an.
-
Habe das Script jetzt recht lange gelesen. An welcher Stelle soll der Agent denn aussteigen und unter welchen Bedingungen? Zwischen den Zeilen habe ich verstanden, dass der Agent nur auf einem der Clusterserver laufen soll.
If ExecSRV = AdminSRV Then ' Wenn der aktuelle Server der Administrationsserver ist, soll er arbeiten
Call doWork ()
Else
If testdb.open(AdminSRV, "names.nsf")Then 'Wenn er das names auf dem Adminserver öffnen kann, soll er nichts machen? Warum sollte er es nicht öffnen können? Was steckt dahinter?
GoTo Ausgang
Else
Call doWork ()
End If
End If
Vielleicht kann dieser spezielle User aus irgendeinem Grund das names auf dem Adminserver nicht öffnen, dann würde er auch laufen. Das steht zumindest in dem Script, wozu, erschließt sich mir nicht. An der Stelle würde ich mal suchen.
-
Kann es nicht sein, dass der einzige Unterschied ist, ob du das Skript auf dem Client oder auf dem Server laufen lässt? Meiner Meinung nach, kannst du auf dem Server nicht Datenbanken auf einem anderen Server öffnen.
Grüße
Ralf
-
Wir fahren zur Wartung der Server diese in regelmäßigen Abständen herunter.
Wenn das der Fall ist, also sprich der vorgesehene Server nicht vorhanden ist,
nur dann soll der Agent auf dem Clusterpartner laufen.
-
... Meiner Meinung nach, kannst du auf dem Server nicht Datenbanken auf einem anderen Server öffnen. ...
Seit R5 schon :)
Wir fahren zur Wartung der Server diese in regelmäßigen Abständen herunter.
Wenn das der Fall ist, also sprich der vorgesehene Server nicht vorhanden ist,
nur dann soll der Agent auf dem Clusterpartner laufen.
Ok, verstanden, dann kann der besagte User vielleicht nicht auf den anderen Server zugreifen? Dazu gibt es m.W. eine Einstellung im Serverdokument (?)
-
doch, doch,
der kann zugreifen.
Du meinst den Abschnitt "Auf Server zugreifen" im Tab Sicherheit im Serverdokument
Und aufs names hat er auch Zugriff
-
Nein, ich meine, es gäbe eine Einstellung, die es erlaubt, dass ein periodischer Agent auf einen anderen Server zugreifen kann, vielleicht geht das auch userbezogen. Ich schau auch mal im Adressbuch nach, ob ich das finde
-
Ne, habe ich jetzt leider auf die Schnelle auch nicht gefunden (bin auch kein Admin). Ich vermute aber irgendetwas in der Richtung kein Zugriff auf das names des anderen Servers durch den speziellen User. Bleibt nur noch "warum nicht"
-
Meinst Du den Bereich
Serverdokument - Sicherheit - Einschränkungen der Programmierbarkeit:
Agenten signieren, die im Namen anderer ausgeführt werden.
Da steht der Kandidat drin und die anderen Administratoren bei denen es klappt nicht.
AAAAber
beide stehen ein Feld höher auch drin, und das schließt laut Hilfe u.a. das Feld mit ein
??????????
-
Ehrlich gesagt, meine ich gar keinen Bereich. Es ist nur ein Gefühl von mir, dass ich meine, mich erinnern zu können, sowas mal gehört zu haben. Administration von Notes ist wirklich nicht mein Kerngeschäft. Aber vielleicht kann das ein Admin bestätigen oder eben auch nicht, dann brauchst Du da nicht weiter zu suchen.
-
Schau doch mal in das Feld Vertrauenswürdige Server (Serverdokument unter Sicherheit ganz unten). Hier sollte der Server der zugreifen soll stehen. Sonst ist wie ich gesagt habe meiner Meinung nach von einem Server auf einem anderen kein Zugriff möglich.
-
Ralf, das ist vollkommen korrekt so. Der Name des Signierers und des "Run in behalf of" spielen bei Server-Server-Zugriff übrigens keine Rolle.
Peter: Korrekt, die trusted servers wurden mit R5 eingeführt, vorher war der Zugriff von Server zu Server nicht möglich.
Bernhard
-
Stelle die betroffenen Serverdokumente gerade so ein und plane Serverneustarts für heute nacht.
Teile Euch dann morgen die Ergebnisse der Tests mit.
Vielen Dank auf jeden Fall schon mal für Eure Mühe
-
Normalerweise sollte für so eine Änderung kein Serverneustart nötig sein.
-
Guten Morgen,
jetzt hat es geklappt.
Der Eintrag in den vertrauenswürdigen Server war korrekt, wir ja bereits von Ralf und Bernhard bestätigt.
Serverneustart war jedoch notwendig.
Vielen Dank noch einmal an alle und einen schönen erfolgreichen Tag