Поделиться через


Обновление с SharePoint 2013 до SharePoint 2016 с помощью диспетчера рабочих процессов

ОБЛАСТЬ ПРИМЕНЕНИЯ:yes-img-132013 yes-img-162016 no-img-192019 no-img-seSubscription Edition no-img-sopSharePoint в Microsoft 365

Сводка

При обновлении Microsoft SharePoint 2013 до Microsoft SharePoint 2016 вам не нужно создавать новую установку Workflow Manager. Вы можете использовать ту же установку, которая использовалась фермой SharePoint 2013 в новой ферме SharePoint 2016. Однако при определенных обстоятельствах может потребоваться создать новую установку Workflow Manager. Например, если вы хотите переместить Workflow Manager в другую операционную систему Windows или сервер сервер внутренней базы данных списан. В таких ситуациях выполните действия, описанные в статье Аварийное восстановление Workflow Manager , чтобы создать новую установку Workflow Manager с использованием старых баз данных. Убедитесь, что используется последняя копия баз данных Workflow Manager.

Общие сведения

При использовании SharePoint Server вместе с Workflow Manager Workflow Manager сохраняет запись сайтов SharePoint, на которых были опубликованы рабочие процессы. Каждый сайт представлен в Workflow Manager как область. Workflow Manager также хранит определения рабочих процессов, все экземпляры рабочих процессов и их состояния.

В SharePoint хранятся журнал рабочих процессов и сведения о задачах рабочего процесса для рабочих процессов SharePoint. При загрузке страницы состояния рабочего процесса SharePoint сначала вызывает Workflow Manager, чтобы узнать, существует ли рабочий процесс. Для этого используется идентификатор экземпляра рабочего процесса. Затем SharePoint загружает остальные сведения о рабочем процессе. Если идентификатор экземпляра рабочего процесса отсутствует в Workflow Manager или если во время взаимодействия с Workflow Manager возникает ошибка, появляется сообщение об ошибке.

Обновление SharePoint 2013 до SharePoint 2016 с помощью Workflow Manager

Предварительные условия

Для установки этого обновления необходимо выполнить следующие предварительные требования:

  • Установите последнее накопительное обновление для Workflow Manager с помощью установщика веб-платформы (web PI).

  • Установите последнюю версию клиента Workflow Manager на серверах SharePoint 2013 и убедитесь, что все рабочие процессы работают.

  • Установите ферму SharePoint Server 2016 и обновите все приложения служб и базы данных контента.

  • На всех серверах фермы SharePoint Server 2016 установите последнюю версию клиента Workflow Manager с помощью web PI.

Регистрация Workflow Manager в SharePoint Server 2016

Чтобы зарегистрировать Workflow Manager в SharePoint Server 2016, выполните следующие действия:

  1. В ферме SharePoint 2013 на веб-сайте центра администрирования щелкните Управление приложениями и управление приложениями-службами, а затем удалите Прокси приложения службы рабочих процессов.

  2. В ферме SharePoint Server 2016 выполните следующий командлет Microsoft PowerShell, чтобы связать SharePoint 2016 с одной и той же установкой Workflow Manager:

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

Распространенные проблемы, которые могут возникнуть после обновления

Проблема 1. Изменен URL-адрес сайта

Если URL-адрес сайта изменен в SharePoint 2016, но идентификатор сайта остается прежним, необходимо повторно опубликовать рабочий процесс с затронутого сайта с помощью SharePoint Designer.

Проблема 2. Рабочие процессы не запускались на некоторых сайтах

Если рабочие процессы не запускаются на некоторых сайтах, повторно опубликуйте их с затронутого сайта. Или запустите задание таймера таймера канала метаданных служб доверенных маркеров безопасности .

Проблема 3. Рабочие процессы завершаются сбоем и возвращают ошибку "Не удается получить сведения о разрешениях субъекта приложения"

Рассмотрим следующий сценарий.

  • В вашей ферме настроены рабочие процессы SharePoint 2013 и Workflow Manager.

  • Вы недавно подключили сайты фермы к ранее существующему экземпляру Workflow Manager.

В этом сценарии рабочие процессы, созданные после подключения к диспетчеру рабочих процессов, успешно завершаются. Однако рабочие процессы, созданные перед подключением к Workflow Manager, не завершаются. Вместо этого они зависают при попытке закончить или остаются в приостановленном состоянии. Для рабочих процессов, которые остаются приостановленными, возникает ошибка HTTP 500. Кроме того, в журнале ULS регистрируется следующая запись: Не удается получить сведения о разрешениях субъекта приложения.

Причина

Workflow Manager уже имеет область для сайта, на котором выполняются рабочие процессы. Так как область содержит неправильное значение SPAuthenticationRealm в поле ApplicationID области, класс SPAppPrincipal не существует в объекте SPWeb , соответствующем значению ApplicationID области. Поэтому рабочие процессы завершаются сбоем и возвращают сообщение об ошибке.

Решение

Чтобы устранить эту проблему, используйте следующие команды PowerShell для регистрации нового объекта SPAppPrincipal . Это делается для объекта SPWeb , идентификатор которого соответствует значению ApplicationID , которое хранится в области для объекта SPWeb в Workflow Manager.

   #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

Обратите внимание: если у субъекта приложения были App-Only разрешения на сайте SharePoint 2013, необходимо также передать командлету Set-SPAppPrincipalPermission -EnableAppOnlyPolicy.

Дополнительная информация

Чтобы получить значение SPAuthenticationRealm ApplicationID, хранящееся в области, выполните следующие действия.

  1. Выполните следующий SQL-запрос:

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

    Где <WebID> — это заполнитель для идентификатора объекта SPWeb.

  2. В результате запроса щелкните значение в столбце SecuritySettings, чтобы открыть XML-код на отдельной вкладке в СРЕДЕ SQL Server Management Studio.

  3. В XML-файле расположен элемент ApplicationID, содержащий значение . Например, найдите следующий элемент:

    <ApplicationId>SPWeb_object_ID@SPAuthenticationRealm</ApplicationId>`
    

    Примечание.

    GUID, отображаемый перед знаком at (@), является идентификатором объекта SPWeb, а GUID, который отображается после знака at, — значением SPAuthenticationRealm.

Кроме того, можно найти значение SPAuthenticationRealm в журнале ULS, например в следующем примере записи журнала:

11/03/2017 12:13:16.72 w3wp.exe (SPWFE01:0x51FC) 0x1298 Авторизация проверки подлинности SharePoint Foundation an3eg Средний Не удается получить сведения о разрешениях субъекта приложения. AppId=i:0i.t|ms.sp.ext|<Идентификатор> объекта SPWeb@<SPAuthenticationRealm>

03.11.2017 12:13:16.72 w3wp.exe (SPWFE01:0x51FC) 0x1298 ошибка SharePoint Foundation General 8nca Medium Application при доступе к /site/teamsite/teamweb/_vti_bin/client.svc, Error=Object reference not set to a instance of an object at Microsoft.SharePoint.SPAppRequestContext.EnsureTenantPermissions(SPServiceContext serviceContext, Boolean throwIfAppNotExits, Boolean allowFullReset) в Microsoft.SharePoint.SPAppRequestContext.InitCurrent(контекст HttpContext) по адресу Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.InitCurrentAppPrincipalToken(HttpContext context) в Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.PostAuthenticateRequestHandler(Object oSender, EventArgs ea) в System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() в System.Web.HttpApplication.ExecuteStep(IExecutionStep step, boolean& completedSynchronously)