Freigeben über


Upgraden von SharePoint 2013 auf SharePoint 2016 über Workflow Manager

GILT FÜR:yes-img-132013 yes-img-162016 no-img-192019 no-img-seSubscription Edition no-img-sopSharePoint in Microsoft 365

Zusammenfassung

Wenn Sie Microsoft SharePoint 2013 auf Microsoft SharePoint 2016 aktualisieren, müssen Sie keine neue Workflow-Manager-Installation erstellen. Sie können dieselbe Installation verwenden, die von der SharePoint 2013-Farm in der neuen SharePoint 2016-Farm verwendet wurde. Unter bestimmten Umständen müssen Sie jedoch möglicherweise eine neue Installation des Workflow-Managers erstellen. Beispielsweise, wenn Sie Workflow-Manager auf ein anderes Windows-Betriebssystem verschieben möchten oder wenn der Back-End-Datenbankserver außer Betrieb genommen wird. Führen Sie in diesen Situationen die Schritte unter Workflow-Manager-Notfallwiederherstellung aus, um die neue Workflow-Manager-Installation mithilfe der alten Datenbanken zu erstellen. Stellen Sie sicher, dass Sie die neueste Kopie der Workflow-Manager-Datenbanken verwenden.

Hintergrund

Wenn Sie SharePoint Server zusammen mit dem Workflow-Manager verwenden, zeichnet workflow-Manager die SharePoint-Websites auf, auf denen Workflows veröffentlicht wurden. Jede Website wird im Workflow-Manager als Bereich dargestellt. Workflow-Manager speichert auch die Workflowdefinitionen, alle Workflowinstanzen und deren Status.

SharePoint speichert den Workflowverlauf und die Workflowaufgabeninformationen für SharePoint-Workflows. Wenn die Workflowstatusseite geladen wird, ruft SharePoint zuerst den Workflow-Manager auf, um festzustellen, ob der Workflow vorhanden ist. Dazu wird die Workflowinstanz-ID verwendet. Anschließend lädt SharePoint die restlichen Workflowinformationen. Wenn die Workflowinstanz-ID im Workflow-Manager fehlt oder während der Kommunikation mit workflow-Manager ein Fehler auftritt, erhalten Sie eine Fehlermeldung.

Aktualisieren von SharePoint 2013 auf SharePoint 2016 mithilfe des Workflow-Managers

Voraussetzungen

Für dieses Upgrade müssen die folgenden Voraussetzungen erfüllt sein:

  • Installieren Sie das neueste kumulative Update für Workflow-Manager mithilfe des Webplattform-Installers (Web PI).

  • Installieren Sie die neueste Version des Workflow-Manager-Clients auf den SharePoint 2013-Servern, und stellen Sie sicher, dass alle Workflows funktionsfähig sind.

  • Installieren Sie die SharePoint Server 2016-Farm, und aktualisieren Sie alle Dienstanwendungen und Inhaltsdatenbanken.

  • Installieren Sie auf allen SharePoint Server 2016-Farmservern die neueste Version des Workflow-Manager-Clients mithilfe von Web PI.

Registrieren des Workflow-Managers bei SharePoint Server 2016

Führen Sie die folgenden Schritte aus, um den Workflow-Manager bei SharePoint Server 2016 zu registrieren:

  1. Klicken Sie in der SharePoint 2013-Farm auf der Website der Zentraladministration auf Anwendungsverwaltung und dann auf Dienstanwendungen verwalten, und löschen Sie dann den Workflowdienstanwendungsproxy.

  2. Führen Sie in der SharePoint Server 2016-Farm das folgende Microsoft PowerShell-Cmdlet aus, um SharePoint 2016 mit derselben Workflow-Manager-Installation zu koppeln:

   Register-SPWorkflowService -SPSite <SharePoint site URL> -
   WorkflowHostUri <Workflow service endpoint URL> -force

Häufige Probleme, die nach dem Upgrade auftreten können

Problem 1: Website-URL wird geändert

Wenn ihre Website-URL in SharePoint 2016 geändert wird, die Website-ID jedoch unverändert bleibt, müssen Sie einen Workflow von der betroffenen Website mithilfe von SharePoint Designer erneut veröffentlichen.

Problem 2: Workflows werden auf einigen Websites nicht gestartet

Wenn Workflows auf einigen Websites nicht gestartet werden, veröffentlichen Sie die Workflows von der betroffenen Website erneut. Oder führen Sie den Zeitgeberauftrag Aktualisieren des Metadatenfeeds vertrauenswürdiger Sicherheitstokendienste aus.

Problem 3: Workflows schlagen fehl und geben den Fehler "App-Prinzipalberechtigungsinformationen nicht abrufen" zurück.

Stellen Sie sich folgendes Szenario vor:

  • Sie haben SharePoint 2013-Workflows und Workflow-Manager in Ihrer Farm konfiguriert.

  • Sie haben kürzlich Websites in der Farm mit einer zuvor vorhandenen Instanz von Workflow-Manager verbunden.

In diesem Szenario werden Workflows, die erstellt werden, nachdem Sie eine Verbindung mit der Workflow-Manager-Installation hergestellt haben, erfolgreich abgeschlossen. Workflows, die erstellt werden, bevor Sie eine Verbindung mit dem Workflow-Manager herstellen, werden jedoch nicht abgeschlossen. Stattdessen bleiben sie hängen, wenn sie versuchen, den Vorgang abzuschließen, oder sie bleiben in einem angehaltenen Zustand. Für Workflows, die angehalten bleiben, erhalten Sie einen HTTP 500-Fehler. Darüber hinaus wird der folgende Eintrag im ULS-Protokoll protokolliert: App-Prinzipalberechtigungsinformationen können nicht abgerufen werden.

Ursache

Workflow-Manager verfügt bereits über einen Bereich für die Website, auf der die Workflows ausgeführt werden. Da der Bereich einen falschen SPAuthenticationRealm-Wert im ApplicationID-Feld des Bereichs aufweist, ist keine SPAppPrincipal-Klasse für das SPWeb-Objekt vorhanden, das mit dem ApplicationID-Wert des Bereichs übereinstimmt. Daher schlagen die Workflows fehl und geben eine Fehlermeldung zurück.

Lösung

Um dieses Problem zu beheben, verwenden Sie die folgenden PowerShell-Befehle, um das neue SPAppPrincipal-Objekt zu registrieren. Dies erfolgt für das SPWeb-Objekt , dessen ID mit dem ApplicationID-Wert übereinstimmt, der im Bereich für das SPWeb-Objekt im Workflow-Manager gespeichert ist.

   #Variables
   $webUrl = "http://sp.contoso.com/sites/teamsite/teamweb"
   $oldAuthRealm = "58a2b173-0f88-4bff-935b-bf3778cd0524" #authentication realm expected by Workflow Manager
   $newAuthRealm = "48834d17-d729-471e-b0d0-a0ec83b49de0" #authentication realm of current farm
   #Get the SPWeb and SPSite objects, and the id of the web
   $web = Get-SPWeb $webUrl
   $site = $web.site
   $clientId = $web.Id
   #Create the old and new app principal ids
   $oldAppId = "$clientId@$oldAuthRealm"
   $newAppId = "$clientId@$newAuthRealm"
   #Register the app principal with the old authentication realm
   Register-SPAppPrincipal -DisplayName "Old Workflow" -Site $web -NameIdentifier $oldAppId
   #Set permissions for the app principal
   #If app-only permissions are used in old environment, you must use the -EnableAppOnlyPolicy parameter to pass to the cmdlet for app steps to succeed
   $oldAppPrincipal = Get-SPAppPrincipal -Site $web -NameIdentifier $oldAppId
   Set-SPAppPrincipalPermission -Site $web -AppPrincipal $oldAppPrincipal -Scope SiteCollection -Right FullControl
   Set-SPAppPrincipalPermission -Site $web -AppPrincipal $oldAppPrincipal -Scope Site -Right FullControl
   #List the app principals with the old and new authentication realms in the ids
   Get-SPAppPrincipal -Site $web -NameIdentifier $oldAppId | fl
   Get-SPAppPrincipal -Site $web -NameIdentifier $newAppId | fl

Hinweis: Wenn der App-Prinzipal über App-Only Berechtigungen auf der SharePoint 2013-Website verfügte, müssen Sie auch -EnableAppOnlyPolicy an das cmdlet Set-SPAppPrincipalPermission übergeben.

Weitere Informationen

Führen Sie die folgenden Schritte aus, um den SPAuthenticationRealm-Wert von ApplicationID abzurufen, der im Bereich gespeichert ist:

  1. Führen Sie die folgende SQL-Abfrage aus:

    SELECT *
    FROM [WFResourceManagementDB].[dbo].[Scopes] WITH (NOLOCK)
    WHERE Description like '%<WebID>%'
    
    

    Dabei <ist WebID> der Platzhalter für die ID des SPWeb-Objekts.

  2. Klicken Sie im Abfrageergebnis auf den Wert in der Spalte SecuritySettings, um den XML-Code auf einer separaten Registerkarte in SQL Server Management Studio zu öffnen.

  3. In der XML-Datei befindet sich das ApplicationID-Element, das den Wert enthält. Suchen Sie beispielsweise das folgende Element:

    <ApplicationId>SPWeb_object_ID@SPAuthenticationRealm</ApplicationId>`
    

    Hinweis

    Die GUID, die vor dem at-Zeichen (@) angezeigt wird, ist die ID des SPWeb-Objekts, und die GUID, die nach dem at-Zeichen angezeigt wird, ist der SPAuthenticationRealm-Wert.

Alternativ finden Sie den WERT SPAuthenticationRealm im ULS-Protokoll, z. B. im folgenden Beispielprotokolleintrag:

03.11.2017 12:13:16.72 w3wp.exe (SPWFE01:0x51FC) 0x1298 SharePoint Foundation-Authentifizierungsautorisierung an3eg Medium App-Prinzipalberechtigungsinformationen nicht abrufen. AppId=i:0i.t|ms.sp.ext|<SPWeb-Objekt-ID>@<SPAuthenticationRealm>

03.11.2017 12:13:16.72 w3wp.exe (SPWFE01:0x51FC) 0x1298 SharePoint Foundation General 8nca Medium Application error when access /site/teamsite/teamweb/_vti_bin/client.svc, Error=Object reference not set to an instance of an object at Microsoft.SharePoint.SPAppRequestContext.EnsureTenantPermissions(SPServiceContext serviceContext, Boolean throwIfAppNotExits, Boolean allowFullReset) at Microsoft.SharePoint.SPAppRequestContext.InitCurrent(HttpContext context) at Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.InitCurrentAppPrincipalToken(HttpContext context) at Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.PostAuthenticateRequestHandler(Object oSender, EventArgs ea) at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)