Laden...

Beste Strategie um Prozess aus Webservice zu starten

Erstellt von realProg vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.399 Views
R
realProg Themenstarter:in
95 Beiträge seit 2010
vor 11 Jahren
Beste Strategie um Prozess aus Webservice zu starten

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

F
174 Beiträge seit 2007
vor 11 Jahren

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

R
realProg Themenstarter:in
95 Beiträge seit 2010
vor 11 Jahren

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).

F
174 Beiträge seit 2007
vor 11 Jahren

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()

16.806 Beiträge seit 2008
vor 11 Jahren

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()

R
realProg Themenstarter:in
95 Beiträge seit 2010
vor 11 Jahren

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).

16.806 Beiträge seit 2008
vor 11 Jahren

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.

R
realProg Themenstarter:in
95 Beiträge seit 2010
vor 11 Jahren

Ach shit, nachgedacht hab ich, aber verkehrt 😕
Danke für die Antworten, dass wars.

F
174 Beiträge seit 2007
vor 11 Jahren

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.