現象
ワークフローの状態リンクを選択すると、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 値は、ページがレンダリングされる場合にのみ過剰にエンコードされます。 したがって、この回避策は安全に使用でき、正しくエンコードされたリンクは変更されないままなので、公式の修正プログラムがインストールされると自動的に動作しなくなります。
回避策
前提条件
ファーム内の各 Web フロント エンド (WFE) サーバーへの管理者アクセス。
IIS URL Rewrite 2.1 がすべての WFE にインストールされています。 モジュールがまだインストールされていない場合は、 IIS Web サイトからダウンロードします。 (モジュールがインストールされていない場合、書き換えルールを追加すると、"HTTP 500.19" エラーが発生します。)
この問題を回避するには、影響を受けるサイトにサービスを提供するすべての WFE サーバーで次の手順を実行します。
オプション 1 - メニューを使用して [ワークフローの状態] ページを開く
ワークフロー ステータス リンクを使用する代わりに、ドキュメントのメニューからワークフロー ステータス ページを開きます。
- 文書の横の メニュー を選択します。
- [詳細>ワークフロー] を選択します。
- [ 内部状態] を選択します。
ワークフロー ステータス ページが表示されます。 下のスクリーンショットを参照してください。
オプション 2 - ルールを直接 web.config
ファイルを手動で編集する場合 (またはサーバー間で変更をスクリプト化する場合):
コンテンツ Web アプリケーションの
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>セクションを見つけます。次のコードに示す
<rewrite>ブロックを<system.webServer>セクションに追加します。<rewrite>セクションが既に存在する場合は、<rules>セクションには<rule>要素のみを追加します。
<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 を手動で変更しないでください。 この値は、ページがレンダリングされるたびに生成されます。 永続的な修正プログラムがインストールされると、追加の変更なしでリンクが正しく生成されます。
この回避策をすべてのサーバーに適用する必要がありますか?
はい。 影響を受けるサイトにサービスを提供するすべての Web フロント エンド (WFE) サーバーに回避策を適用します。 または、URL 書き換えをサポートするリバース プロキシまたはロード バランサーを使用する場合は、代わりに同等のルールを適用できます。
IIS のリセットは必要か。
いいえ。 GUI を使用してルールを編集 web.config または適用すると、SharePoint はアプリケーションを自動的にリサイクルします。