Azure で実行時間の長いワークフロー サービスをホストしようとしていますが、関連付けに問題があります。
timeToUnload と timeToPersist を 0 に設定し、ワークフローで「送信前に保持」にチェックを入れました。これは永続性の問題ではなく、インスタンス キーの計算方法に関係しています。
ある Web サーバーがワークフローを開始し、別の Web サーバーがワークフローで別のアクションを実行しようとすると、次のエラーで失敗します。
System.ServiceModel.FaultException: インスタンス キー '12e0b449-7a71-812d-977a-ab89864a272f' がインスタンスに関連付けられていなかったため、InstancePersistenceCommand の実行が中断されました。これは、インスタンスまたはキーがクリーンアップされたか、キーが無効であるために発生する可能性があります。キーが生成されたメッセージが間違った時間に送信された場合、または誤った相関データが含まれていた場合、キーが無効である可能性があります。
wcf サービス診断を使用してこれを詳しく調べたところ、インスタンス キーの計算にWeb サイト インスタンス名が含まれているため、特定のワークフロー インスタンスは、それをインスタンス化したのと同じマシンからのみ呼び出すことができることがわかりました ( Azure が設定したため)。役割インスタンスごとに異なる Web サイト インスタンス名)。
説明すると、ワークフローの新しいインスタンスを作成するときに、ワークフロー インスタンス Guid を取得してその GUID を返し、相関イニシャライザを使用して相関ハンドルを設定するアクティビティがあります。
web.config でサービス トレースを有効にしたので、ワークフローの新しいインスタンスをインスタンス化すると、サービス トレース ビューアーで次のようなことが起こっていることがわかります。
<ApplicationData >
<TraceData >
<DataItem >
<TraceRecord Severity ="Information" Channel="Analytic " xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord ">
<TraceIdentifier >225</ TraceIdentifier>
<Description >Calculated correlation key '496e3207-fe9d-919f-b1df-f329c5a64934' using values 'key1:10013d62-286e-4a8f-aeb2-70582591cd7f,' in parent scope '{/NewOrbit.ExVerifier.Web_IN_2_Web/Workflow/Application/}Application_default1.xamlx'.</Description >
<AppDomain >/LM/W3SVC/1273337584/ROOT-1-129811251826070757</AppDomain >
</TraceRecord >
</DataItem >
</TraceData >
</ApplicationData >
重要な行は次のとおりです。
親スコープ「{/NewOrbit.ExVerifier.Web_IN_2_Web/Workflow/Application/}Application_default1.xamlx」の値「key1:10013d62-286e-4a8f-aeb2-70582591cd7f」を使用して、計算された相関キー「496e3207-fe9d-919f-b1df-f329c5a64934」 '。
この特定のワークフロー インスタンスの Guid は である10013d62-286e-4a8f-aeb2-70582591cd7f
ため、ワークフロー エンジンは から「インスタンス キー」を計算します496e3207-fe9d-919f-b1df-f329c5a64934
。GUID を持つワークフロー インスタンス[System.Activities.DurableInstancing].[InstancesTable]
が表示され、インスタンス キーが に表示され[System.Activities.DurableInstancing].[KeysTable]
ます。ここまでは順調で、同じサーバーが後で同じワークフローを呼び出すと、すべて正常に動作します。ただし、別のサーバーがワークフローにアクセスしようとすると、上記の相関エラーが発生します。もう一度診断トレースを見ると、次のことがわかります。
<TraceData >
<DataItem >
<TraceRecord Severity ="Information" Channel="Analytic " xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord ">
<TraceIdentifier >225</ TraceIdentifier>
<Description >Calculated correlation key '12e0b449-7a71-812d-977a-ab89864a272f' using values 'key1:10013d62-286e-4a8f-aeb2-70582591cd7f,' in parent scope '{/NewOrbit.ExVerifier.Web_IN_5_Web/Workflow/Application/}Application_default1.xamlx'. </Description >
<AppDomain >/LM/W3SVC/1273337584/ROOT-1-129811251818669004</AppDomain >
</TraceRecord >
</DataItem >
</TraceData >
重要な行は
親スコープ '{/NewOrbit.ExVerifier.Web_IN_5_Web/Workflow/Application/}Application_default1.xamlx' の値 'key1:10013d62-286e-4a8f-aeb2-70582591cd7f' を使用して計算された相関キー '12e0b449-7a71-812d-977a-ab89864a272f' '。
ご覧のとおり、同じ Guid が渡されますが、システムはインスタンス キーの計算に Web サイト インスタンスの名前を含めるため、完全に異なるインスタンス キーになります。
これをテストするためにまったく新しいプロジェクトを作成しましたが、まったく同じ問題が見つかりました。同じ問題を抱えている人を他に見つけることができないので、私は非常に単純な間違ったことをしているに違いないと感じています。