Hallo Leute!
Ein Prozess (Konsolenprogramm welches ca. eine halbe Stunde läuft) soll durch Aufruf eines Webservices (.asmx) gestartet werden.
Was ist hierfür die beste Strategie?
Der Prozess kann auch gestartet werden, nur kommt es durch fehlende Berechtigungen zu Problemen bei der Abarbeitung des Prozesses. D.h. ich kann nicht auf SharePoint zugreifen
Hallo realProg,
kannst du kurz beschreiben, was die Konsolen-Applikation machen soll? Eventuell bietet SharePoint an dieser Stelle auch eine bessere Lösung an.
Achja, welche SharePoint Version benutzt du?
Gruß,
felix
Ich glaube nicht, dass es hier an der SharePoint-Version etc. liegt.
Wenn ich das Programm direkt starte läuft alles problemlos.
Ich glaube viel mehr, dass das Problem im Benutzer des Prozesses liegt, da dieser bei lokaler Ausführung ein anderer ist (angemeldeter Benutzer), als bei Start über das Webservice (SYSTEM).
Ich glaube nicht, dass es hier an der SharePoint-Version etc. liegt.
Wenn ich das Programm direkt starte läuft alles problemlos.Ich glaube viel mehr, dass das Problem im Benutzer des Prozesses liegt, da dieser bei lokaler Ausführung ein anderer ist (angemeldeter Benutzer), als bei Start über das Webservice (SYSTEM).
Als SharePoint-Entwickler habe ich vielleicht eine alternative (elegantere) Lösung für dich. Aber das setzt vorraus, dass du meine Frage beantwortest 😉
Aber zum eigentlichen Thema:
Aus dem Objekt-Modell heraus solltest du auf dem SharePoint-Server eigentlich ohne Probleme eine Konsolen-Anwendung starten können.
Schau' dir ggf. dazu mal dashier an:
SPSecurity.RunWithElevatedPrivileges()
Webanwendungen laufen immer mit eingeschränkten Rechten; zudem mit dem Account, der im zugewiesenen AppPool hinterlegt ist.
Eine Strategie an für sich gibts nicht: entweder es klappt mit den Rechten, oder Du musst Dir was anderes einfallen lassen.
Ansonsten musst Du eben zB noch WorkingDirectory beachten, wie immer beim Process.Start()
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ablauf:
Webservice wird aufgerufen und startet Konsolenprogramm welches auf dem Server liegt (nicht SharePoint-Server).
Dieses Konsolenprogramm ließt dann die Struktur des SharePoints aus.
Das Konsolenprogramm wird mit dem Benutzer "SYSTEM" gestartet. In der Config des Konsolenprogramms sind die SharePoint-Zugangsdaten hinterlegt mit welchem sich das Programm am SharePoint anmelden soll.
WorkingDirectory ist gesetzt und die AppPool-Identity ist auf "Local Sytem" gesetzt.
Fazit: Das Programm wird gestartet, die Anmeldung am SharePoint funktioniert dann aber nicht mehr (was bei Start des Programms direkt am Server aber funktioniert).
Das ist doch auch logisch; ⚠ bitte nachdenken ⚠
Wenn Du es manuell startest, dann wird das Benutzerkonto des ausführenden Users verwendet, bzw dessen UserToken.
Wenn Du die Webanwendung die ConsoleApp starten lässt, dann wird eben LocalSystem verwendet und der hat eben keine Rechte.
Reichen die Rechte von LocalSystem eben nicht, musst Du eben einen anderen User im AppPool hinterlegen.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ach shit, nachgedacht hab ich, aber verkehrt 😕
Danke für die Antworten, dass wars.
Gut ... ich kenne natürlich die Anforderung nicht, aber wenn das Programm auf einem separaten Server laufen muss, dann musst du natürlich mit dem Client-Objekt-Modell arbeiten, oder halt direkt die WebServices ansprechen.
Anderenfalls hätte ich dir jetzt einen SharePoint TimerJob vorgeschlagen. Da hast du solche Probleme definitiv nicht.
Wie dem auch sei ... scheinbar hast du ja jetzt eine Lösung.