通过工作流管理器将 SharePoint 2013 升级到 SharePoint 2016

原始 KB 编号:   4073758

摘要

将 Microsoft SharePoint 2013 升级到 Microsoft SharePoint 2016 时,不必创建新的 工作流管理器 安装。 您可以在新的 SharePoint 2016 服务器场中使用与 SharePoint 2013 服务器场相同的安装。

但是,在某些情况下,您可能必须创建新的 工作流管理器安装程序。 例如,如果要将工作流管理器移动到其他Windows操作系统,或者后端数据库服务器停用。 在这些情况下,请按照灾难恢复工作流管理器中的步骤,使用旧工作流管理器创建新的数据库。 请确保使用数据库数据库的最新工作流管理器副本。

背景

当您将 SharePoint Server 与 工作流管理器 一工作流管理器,将记录已发布SharePoint的网站。 每个网站都以工作流管理器范围 表示。 工作流管理器还存储工作流定义、所有工作流实例及其状态。

SharePoint存储工作流的工作流历史记录和工作流SharePoint信息。 加载工作流状态页时,SharePoint首先调用工作流工作流管理器查看工作流是否存在。 为此,它使用工作流实例 ID。 然后,SharePoint加载工作流信息的其余部分。 如果工作流实例 ID 在工作流工作流管理器,或者如果在与工作流实例通信期间工作流管理器,您将收到一条错误消息。

通过工作流管理器将 SharePoint 2013 升级到 SharePoint 2016

先决条件

  • 使用 Web 平台安装程序工作流管理器 Web PI (安装) 。
  • 在 SharePoint 2013 服务器上安装最新版本的 工作流管理器 Client,并确保所有工作流都正常运行。
  • 安装 SharePoint 2016 服务器场,并升级所有服务应用程序和内容数据库。
  • 在所有 SharePoint 2016 场服务器上,使用 Web PI 工作流管理器客户端的最新版本。

向 工作流管理器 2016 SharePoint注册

为此,请按照下列步骤操作:

  1. 在 SharePoint 2013 > > 服务器场中,转到"管理中心""应用程序管理""管理服务应用程序",然后删除"工作流服务 应用程序代理"。

  2. 在 SharePoint 2016 场中,运行以下 PowerShell cmdlet 将 SharePoint 2016 与相同的 工作流管理器 安装配对:

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

备注

请注意,在 2016 年 2016 年SharePoint中升级的内容数据库应已从最新备份还原。 这有助于防止数据库和内容工作流管理器之间的差异和差异。

升级后可能会遇到的常见问题

问题 1:网站 URL 已更改

如果您的网站 URL 在 SharePoint 2016 中发生更改,但网站 ID 保持不变,则必须使用网站设计器从受影响的网站重新SharePoint工作流。

问题 2:某些网站上没有启动工作流

如果工作流未在某些网站上启动,请从受影响的网站重新发布工作流。 或者,运行 "刷新受信任安全令牌服务元数据源" 计时器作业。

问题 3:工作流失败并返回"无法获取应用程序主体权限信息"错误

症状

请考虑以下情况:

  • 您SharePoint 2013 工作流,工作流管理器服务器场中配置工作流和工作流。
  • 您最近将服务器场中的网站连接到以前现有的 工作流管理器。

在此方案中,连接到工作流后创建的工作流工作流管理器成功完成安装。 但是,在连接到工作流之前创建的工作流管理器工作流不会完成。 相反,当他们尝试完成操作或处于挂起状态时,会卡住。 对于保持挂起的工作流,您将收到 HTTP 500 错误。 此外,ULS 日志中还记录了以下条目:

无法获取应用程序主体权限信息。

原因

工作流管理器已具有运行工作流的网站的范围。 由于范围字段中的值 SPAuthenticationRealm ApplicationID SPAppPrincipal 不正确,因此 SPWeb ApplicationID 对象上不存在与范围值匹配的类。 因此,工作流将失败并返回一条错误消息。

解决方案

若要解决此问题,请使用以下 PowerShell 命令注册新 SPAppPrincipal 对象。 可以针对SPWeb其 ID ApplicationID SPWeb 与对象作用域中存储的值匹配的对象工作流管理器。

#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
$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

详细信息

若要获取 SPAuthenticationRealm 作用域 ApplicationID 中存储的值,请按照以下步骤操作:

  1. 运行以下SQL查询:

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

    备注

    <WebID>是对象 ID 的 SPWeb 占位符。

  2. 在查询结果中,单击SecuritySettings列中的值以在查询结果中的单独选项卡上SQL Server Management Studio。

  3. 在 XML 文件中,找到 ApplicationID 包含值的元素。 例如,找到以下元素:

    <ApplicationId>SPWeb_object_ID@SPAuthenticationRealm</ApplicationId>

    备注

    显示在 at 符号 (@) 前面的 GUID 是对象的 ID SPWeb ,at 符号后面的 GUID 是 SPAuthenticationRealm 值。

或者,您可以在 SPAuthenticationRealm ULS 日志中查找值,如以下示例日志条目:

SPWFE01w3wp.exe (/时间:0x51FC) 0x1298 SharePoint Foundation 身份验证授权 an3eg Medium 无法获取应用程序主体权限信息。 AppId=i:0i.t|ms.sp.ext|<SPWeb object ID>@<SPAuthenticationRealm>

访问 /site/teamsite/teamweb/_vti_bin/client.svc 时的日期/时间 w3wp.exe (SPWFE01:0x51FC) 0x1298 SharePoint Foundation 常规 8nca 中型应用程序错误,错误=对象引用未设置为对象的实例。 位于 Microsoft。SharePoint。SPAppRequestContext.EnsureTenantPermissions (SPServiceContext serviceContext、Boolean throwIfAppNotExits、Boolean allowFullReset) Microsoft。SharePoint。SPAppRequestContext.InitCurrent (Microsoft) HttpContext 上下文。SharePoint。ApplicationRuntime.SPRequestModule.InitCurrentAppPrincipalToken (Microsoft) HttpContext 上下文。SharePoint。ApplicationRuntime.SPRequestModule.PostAuthenticateRequestHandler (Object oSender, 位于 System.Web.HttpApplication.ExecuteStep (IExecutionStep step, Boolean& completedSynchronously step, System.Web.HttpApplication.IExecutionStep.Execute () 的 EventArgs ea) at System.Web.HttpApplication.SyncEventExecutionStep.IExecut) ionStep.Execute ()