증상
워크플로 상태 링크를 선택하면 WrkStat.aspx에 "WorkflowInstanceID 매개 변수가 잘못되었습니다." 오류 메시지가 표시됩니다. 이는 URL의 WorkflowInstanceID 값이 과도하게 인코딩되어 각 %가 %25(경우에 따라 %2525)로 인코딩되기 때문에 발생합니다.
| 상태 |
WorkflowInstanceID 값 |
|---|---|
| 올바른 | ...&WorkflowInstanceID=%7b5C3B04B5%2d7099%2d42A9%2d8073%2dEBB154B9EAC9%7d |
| 손상됨(이중 인코딩) | ...&WorkflowInstanceID=%257b5C3B04B5%252d7099%252d42A9%252d8073%252dEBB154B9EAC9%257d |
| 손상됨(삼중 인코딩) | ...&WorkflowInstanceID=%25257b...%25252d...%25257d |
이 오류에 대한 영구 수정은 예정된 Microsoft SharePoint 업데이트에 포함될 예정입니다. 그때까지는 이 문서에 제공된 IIS URL 다시 쓰기 규칙을 해결 방법으로 사용하여 저장된 데이터를 수정하지 않고 워크플로 상태 링크를 복원할 수 있습니다. 요청이 처리되는 동안 규칙은 URL을 수정합니다. 따라서 목록에 저장된 데이터는 변경되지 않습니다.
링크 자체는 저장소에서 손상되지 않습니다. WorkflowInstanceID 값은 페이지가 렌더링될 때만 과도하게 인코딩됩니다. 따라서 이 해결 방법은 사용하기에 안전하며 올바르게 인코딩된 링크는 변경되지 않은 상태로 남아 있으므로 공식 수정 사항이 설치된 후 자동으로 작동하지 않습니다.
해결 방법
필수 구성 요소
팜의 각 WFE(웹 프런트 엔드) 서버에 대한 관리자 액세스 권한
IIS URL 재작성 2.1은 모든 WFE에 설치되어 있습니다. 모듈이 아직 설치되지 않은 경우 IIS 웹 사이트에서 다운로드합니다. (모듈이 설치되지 않은 경우 다시 쓰기 규칙을 추가하면 "HTTP 500.19" 오류가 발생합니다.)
이 문제를 해결하려면 영향을 받는 사이트에 서비스를 제공하는 모든 WFE 서버에서 다음 단계를 수행합니다.
옵션 1 - 메뉴를 사용하여 워크플로 상태 페이지 열기
워크플로 상태 링크를 사용하는 대신 문서 메뉴에서 워크플로 상태 상태 페이지를 엽니다.
- 문서 옆에 있는 메뉴 를 선택합니다.
- 추가>워크플로를 선택합니다.
- 내부 상태를 선택합니다.
워크플로 상태 페이지가 표시됩니다. 아래 스크린샷을 참조하세요.
옵션 2 - 다음에 직접 규칙 추가 web.config
파일을 수동으로 편집하려는 경우(또는 서버 간에 변경 내용을 스크립팅하는 경우):
콘텐츠 웹 응용 프로그램의
web.config파일을 찾습니다. 파일은 일반적으로 다음 위치에 저장됩니다.C:\inetpub\wwwroot\wss\VirtualDirectories\<port>\web.config (<port> is the port of the affected web application, e.g. 80 or 443.)파일을 안전한 위치에 복사하여 백업합니다.
텍스트 편집기에서 열고
web.config섹션을 찾습니다.<system.webServer>다음 코드에 표시된 블록을 섹션에
<system.webServer>추가합니다<rewrite>. 섹션이<rewrite>이미 있는 경우 해당 섹션에 요소만<rule>추가합니다.<rules>
<rewrite>
<rules>
<rule name="Fix over-encoded WrkStat WorkflowInstanceID" stopProcessing="true">
<match url="^(.*)(_layouts/15/WrkStat\.aspx)$" ignoreCase="true" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}"
pattern="^(.*)(List|WorkflowInstanceID)=%(?:25)+7b([0-9A-Fa-f]{8})%(?:25)+2d([0-9A-Fa-f]{4})%(?:25)+2d([0-9A-Fa-f]{4})%(?:25)+2d([0-9A-Fa-f]{4})%(?:25)+2d([0-9A-Fa-f]{12})%(?:25)+7d(.*)$" />
</conditions>
<action type="Rewrite"
url="{R:0}?{C:1}{C:2}=%7b{C:3}%2d{C:4}%2d{C:5}%2d{C:6}%2d{C:7}%7d{C:8}"
appendQueryString="false" />
</rule>
</rules>
</rewrite>
- 파일을 저장합니다. SharePoint는 응용 프로그램을 자동으로 재활용합니다. 따라서 IIS 재설정은 필요하지 않습니다.
해결 방법 확인
- 워크플로 상태 열이 포함된 목록을 엽니다.
- 이전에 "WorkflowInstanceID 매개 변수가 잘못되었습니다." 오류 메시지가 표시되었던 워크플로 상태 링크를 선택합니다.
- 워크플로 상태 페이지가 열리는지 확인합니다.
- 이미 작동 중이던 워크플로 상태 링크가 계속해서 올바르게 작동하는지 확인합니다. 재작성 규칙은 과도하게 인코딩된 링크만 수정하고 올바르게 인코딩된 링크는 변경하지 않은 상태로 둡니다.
과도하게 인코딩된 링크가 여러 개 있는 경우 이중 인코딩(%257b...) 및 삼중 인코딩(%25257b...) 링크가 모두 성공적으로 열리는지 확인합니다.
FAQ(질문과 대답)
이렇게 하면 목록 데이터가 변경되거나 손상되나요?
아니요. 과도한 인코딩은 페이지 렌더링 중에 링크가 생성될 때만 발생합니다. 기본 데이터가 올바르게 저장됩니다. 따라서 복구하거나 변환할 것이 없습니다. 다시 쓰기 규칙은 요청이 처리되는 동안 URL을 수정합니다.
목록에 저장된 URL을 업데이트해야 하나요?
아니요. 저장된 URL을 수동으로 수정하지 마세요. 페이지가 렌더링될 때마다 값이 생성됩니다. 영구 수정 사항이 설치되면 추가 변경 없이 링크가 올바르게 생성됩니다.
이 해결 방법을 모든 서버에 적용해야 합니까?
예. 영향을 받는 사이트에 서비스를 제공하는 모든 WFE(웹 프런트 엔드) 서버에 해결 방법을 적용합니다. 또는 URL 다시 쓰기를 지원하는 역방향 프록시 또는 부하 분산 장치를 사용하는 경우 대신 동등한 규칙을 적용할 수 있습니다.
IIS 초기화가 필요합니까?
아니요. GUI를 통해 규칙을 편집 web.config 하거나 적용하면 SharePoint에서 응용 프로그램을 자동으로 재활용합니다.