워크플로 관리자를 통해 SharePoint 2013에서 SharePoint 2016으로 업그레이드

적용 대상:예-img-132013 yes-img-162016 no-img-192019 no-img-seSubscription Edition no-img-sopSharePoint in Microsoft 365

요약

Microsoft SharePoint 2013을 Microsoft SharePoint 2016으로 업그레이드하는 경우 새 워크플로 관리자 설치를 만들 필요가 없습니다. 새 SharePoint 2016 팜에서 SharePoint 2013 팜에서 사용한 것과 동일한 설치를 사용할 수 있습니다. 그러나 특정 상황에서 워크플로 관리자의 새 설치를 만들어야 할 수 있습니다. 예를 들어 워크플로 관리자를 다른 Windows 운영 체제로 이동하려는 경우 또는 백 엔드 데이터베이스 서버가 해제된 경우입니다. 이러한 상황에서는 Workflow Manager 재해 복구 의 단계에 따라 이전 데이터베이스를 사용하여 새 워크플로 관리자 설치를 만듭니다. 워크플로 관리자 데이터베이스의 최신 복사본을 사용해야 합니다.

배경

SharePoint Server를 워크플로 관리자와 함께 사용하는 경우 워크플로 관리자는 워크플로를 게시한 SharePoint 사이트의 레코드를 유지합니다. 각 사이트는 워크플로 관리자에서 범위로 표시됩니다. 워크플로 관리자는 워크플로 정의, 모든 워크플로 인스턴스 및 해당 상태도 저장합니다.

SharePoint는 SharePoint 워크플로에 대한 워크플로 기록 및 워크플로 작업 정보를 저장합니다. 워크플로 상태 페이지가 로드되면 SharePoint는 먼저 워크플로 관리자를 호출하여 워크플로가 있는지 확인합니다. 이렇게 하려면 워크플로 인스턴스 ID를 사용합니다. 그런 다음, SharePoint는 나머지 워크플로 정보를 로드합니다. 워크플로 관리자에서 워크플로 인스턴스 ID가 없거나 워크플로 관리자와 통신하는 동안 오류가 발생하면 오류 메시지가 표시됩니다.

워크플로 관리자를 사용하여 SharePoint 2013을 SharePoint 2016으로 업그레이드하는 방법

필수 조건

이 업그레이드를 설치하려면 다음 필수 구성 요소를 수행해야 합니다.

  • 웹 PI(웹 플랫폼 설치 관리자)를 사용하여 워크플로 관리자에 대한 최신 누적 업데이트를 설치합니다.

  • SharePoint 2013 서버에 최신 버전의 Workflow Manager 클라이언트를 설치하고 모든 워크플로가 작동하는지 확인합니다.

  • SharePoint Server 2016 팜을 설치하고 모든 서비스 애플리케이션 및 콘텐츠 데이터베이스를 업그레이드합니다.

  • 모든 SharePoint Server 2016 팜 서버에서 웹 PI를 사용하여 최신 버전의 Workflow Manager 클라이언트를 설치합니다.

SharePoint Server 2016에 워크플로 관리자 등록

다음 단계를 사용하여 SharePoint Server 2016에 워크플로 관리자를 등록합니다.

  1. SharePoint 2013 팜의 중앙 관리 웹 사이트에서 애플리케이션 관리를 클릭하고 서비스 애플리케이션 관리를 클릭한 다음 워크플로 서비스 애플리케이션 프록시를 삭제합니다.

  2. SharePoint Server 2016 팜에서 다음 Microsoft PowerShell cmdlet을 실행하여 SharePoint 2016을 동일한 워크플로 관리자 설치와 페어링합니다.

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

업그레이드 후 발생할 수 있는 일반적인 문제

문제 1: 사이트 URL이 변경됨

SharePoint 2016에서 사이트 URL이 변경되었지만 사이트 ID가 동일하게 유지되는 경우 SharePoint Designer를 사용하여 영향을 받는 사이트에서 워크플로를 다시 게시해야 합니다.

문제 2: 일부 사이트에서 워크플로가 시작되지 않음

일부 사이트에서 워크플로가 시작되지 않으면 영향을 받는 사이트에서 워크플로를 다시 게시합니다. 또는 신뢰할 수 있는 보안 토큰 서비스 메타데이터 피드 타이머 새로 고침 작업을 실행합니다.

문제 3: 워크플로가 실패하고 "앱 주체 권한 정보를 가져올 수 없음" 오류를 반환합니다.

다음과 같은 경우를 생각해볼 수 있습니다.

  • 팜에 SharePoint 2013 워크플로 및 워크플로 관리자가 구성되어 있습니다.

  • 최근에 팜의 사이트를 워크플로 관리자의 기존 인스턴스에 연결했습니다.

이 시나리오에서는 워크플로 관리자 설치에 연결한 후 생성된 워크플로가 성공적으로 완료됩니다. 그러나 워크플로 관리자에 연결하기 전에 만든 워크플로는 완료되지 않습니다. 대신, 그들은 완료 하려고 하거나 그들은 일시 중단 된 상태에 남아 있을 때 붙어. 일시 중단된 상태로 유지되는 워크플로의 경우 HTTP 500 오류가 발생합니다. 또한 다음 항목이 ULS 로그에 기록됩니다. 앱 주체 권한 정보를 가져올 수 없습니다.

원인

워크플로 관리자에는 워크플로가 실행 중인 사이트에 대한 범위가 이미 있습니다. 범위에 범위의 ApplicationID 필드에 잘못된 SPAuthenticationRealm 값이 있으므로 범위의 ApplicationID 값과 일치하는 SPWeb 개체에 SPAppPrincipal 클래스가 없습니다. 따라서 워크플로가 실패하고 오류 메시지가 반환됩니다.

해결 방법

이 문제를 해결하려면 다음 PowerShell 명령을 사용하여 새 SPAppPrincipal 개체를 등록합니다. ID가 워크플로 관리자의 SPWeb 개체 범위에 저장된 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
   #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

참고: 앱 보안 주체가 SharePoint 2013 사이트에 대한 App-Only 권한이 있는 경우 -EnableAppOnlyPolicy를 Set-SPAppPrincipalPermission cmdlet에도 전달해야 합니다.

추가 정보

범위에 저장된 ApplicationID의 SPAuthenticationRealm 값을 얻으려면 다음 단계를 수행합니다.

  1. 다음 SQL 쿼리를 실행합니다.

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

    여기서 <WebID> 는 SPWeb 개체의 ID에 대한 자리 표시자입니다.

  2. 쿼리 결과에서 SecuritySettings 열의 값을 클릭하여 SQL Server Management Studio의 별도 탭에서 XML을 엽니다.

  3. XML 파일에서 값을 포함하는 ApplicationID 요소를 찾습니다. 예를 들어 다음 요소를 찾습니다.

    <ApplicationId>SPWeb_object_ID@SPAuthenticationRealm</ApplicationId>`
    

    참고

    at 기호(@) 앞에 나타나는 GUID는 SPWeb 개체의 ID이며, at 기호 다음에 표시되는 GUID는 SPAuthenticationRealm 값입니다.

또는 다음 예제 로그 항목과 같이 ULS 로그에서 SPAuthenticationRealm 값을 찾을 수 있습니다.

2017년 11월 03일 12:13:16.72 w3wp.exe(SPWFE01:0x51FC) 0x1298 SharePoint Foundation 인증 권한 부여 an3eg Medium은 앱 주체 권한 정보를 가져올 수 없습니다. AppId=i:0i.t|ms.sp.ext|<SPWeb 개체 ID>@<SPAuthenticationRealm>

2017년 11월 03일 12:13:16.72 w3wp.exe(SPWFE01:0x51FC) 0x1298 SharePoint Foundation 일반 8nca 보통 애플리케이션에 액세스하는 경우 /site/teamsite/teamweb/_vti_bin/client.svc, Microsoft.SharePoint.SPAppRequestContext.InitCurrent(HttpContext 컨텍스트)의 Microsoft.SharePoint.SPAppRequestContext.EnsureTenantPermissions(SPServiceContext serviceContext, Boolean throwIfAppNotExits, Boolean allowFullReset)에서 개체 인스턴스로 설정되지 않은 Error=Object 참조 Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.InitCurrentAppPrincipalToken(HttpContext context) at Microsoft.SharePoint.ApplicationRuntime.SPRequestModule.PostAuthenticateRequestHandler(Object oSender, System.Web.HttpApplication.ExecuteStep(IExecutionStep 단계, 부울& completedSynchronously)의 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()의 EventArgs ea)