Isolationsprozess dem Nutzer zuordnen?

Triton

Neues Mitglied
Moin,

bei uns ist es hin und wieder notwendig einen Nutzer zwanghaft von seinem Sage-Prozessen zu befreien (beispielweise irgendwas abgestürzt, Programm hängt). Das beenden der lokalen Prozesse für die OL reicht aber nicht aus, es muss zusätzlich auch noch der entsprechende Isolationsprozess des Applikationsservers beendet werden, der dem Nutzer zugeordnet ist. Wenn dieser nicht beendet wird und sich der Nutzer erneut anmeldet, "hängt" er wieder fest. Die entsprechenden Isolationsprozesse identifizieren wir über den Sage Server Manager, was aber recht aufwendig ist (Auf jedem Applikationsserver öffnen, nachschauen, PIDs merken, dann manuell löschen).

Um dies zu automatisieren die Frage: Ist es möglich den Prozess programmatisch einem Nutzer zuzuordnen? Oder vielleicht besser andersherum gefragt: Kann ich für einen gegebenen Nutzer mir alle zugeordneten Isolationsprozesse ausgeben lassen?

Falls jemand damit schon Berührungspunkte hatte und mich womöglich in Richtung einer interessanten .dll schieben könnte, wäre ich sehr dankbar.
 
Ist schon eine Weile her, nämlich ein Jahr, da hatte ich Sage persönlich danach gefragt. Da gab es von Sage die Antwort, das man dieses nicht steuern könnte. Also Technisch nicht im Programm Code hinterlegt wurde. Eine Änderung diesbezüglich halte ich für durchaus sinnvoll. Denn genau diese Anfrage hatte ich letztes Jahr durch einen Kunden bekommen. Konnte ihm damals also nur mitteilen, das diese von Sage nicht vorgesehen ist. Allerdings hat sich seit 9.0.4 ja was verändert. Daher würde ich einfach mal spontan Ihre Anfrage heute erneut den Sage Support übermitteln. Mal sehen, was die mir zurückschreiben.
 
Vielen Dank.

Ich hatte gedacht, es müsste irgendwie möglich sein, da der Sage Server Manager ja auch eine Zuordnung ermöglicht.
 
Laut Sage Support gibt es keine Möglichkeiten die Prozesse einem User zuzuordnen. Allerdings gibt es die Möglichkeit der Sortierung, damit man etwas besser die Prozess dem User zuordnen kann. Das habe ich mir angesehen. Die Sortierung geht. Aber mehr bekam ich vom Support nicht raus.

Im Sage Server Manager sehen Sie unter Diagnose - Isolationsprozesse in der Spalte Kontext die Datenbank, den Benutzer und die Mandantennummer. Diese Spalte ist sortierbar, die Reihenfolge ist aber zuerst Datenbank und dann Benutzer.
Die PID wird in einer eigenen Spalte angezeigt.
 
Zuerst einmal vielen Dank für die Mühe Bisut.

Den Server Manager benutzen wir bereits für die Identifizierung der einzelnen Prozesse. Meine Hoffnung war, dass ich eine Art eigenen Server Manager nachimplementieren kann, welcher es mir ebenfalls erlaubt die Kontextspalte auszulesen, um so eine automatisierte Zuordnung zum (aktuellen) Nutzer des Prozesses zu ermöglichen. Intern scheint es so, als würden die Isolationsprozesse dynamisch Nutzern zugeordnet und entzogen werden. Wenn allerdings etwas abstürzt, hängt der Prozess bei dem aktuellen Nutzer fest und wir müssen ihn händisch über den Sage Server Manager identifizieren und beenden. Um so eine Funktion für eine Automatisierung zu Implementieren, hatte ich gehofft, ich könnte da an eine bestehende .dll anknüpfen. Der Task an sich stellt leider nicht die Informationen bereit, wie sie der Server Manager anzeigt, weshalb ich vermute, dass er intern verwaltet wird.
 
Kann ich nachvollziehen, aber Sage bestätigte mir, das die Zuordnung "dynamisch" ist und daher nicht dem User zugeordnet werden kann. Ist daher kein Fall mehr für den Sage Support. Wäre daher eine Stufe über Consulting anzufragen. Dazu kann ich aber nicht unterstützen. Sorry
 
Hi,
für die Abfrage im Server Manager wird per Code auf die WMI Objekte zugegriffen.
Per Powershell lässt sich das nachstellen:

Code:
Get-WmiObject  -Class ServiceDomainInformation  -Namespace root\Sagede\ApplicationServer10 | Format-Table -Property ServiceName, WindowsProcessId, State, Context, RequestContext
 
Oh vielen Dank! Das ist genau das, was ich benötige. Ich habe das schnell mal in C# nachgebaut:

Code:
using System.Management;
ManagementObjectSearcher searcher = new ManagementObjectSearcher(new ManagementScope("root\\Sagede\\ApplicationServer10"),
                                                                 new WqlObjectQuery("SELECT * FROM ServiceDomainInformation"));
ManagementObjectCollection queryCollection1 = searcher.Get();
foreach (ManagementObject mo in queryCollection1)
{
    Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", mo["ServiceName"], mo["WindowsProcessId"], mo["State"], mo["Context"], mo["RequestContext"] );
}

Thema kann geschlossen werden.
 
Zurück
Oben