相関を使用する長期実行ワークフロー サービスがあります。このサービスのクライアントは、2 つの要求を立て続けに送信します。すべての受信アクティビティのメッセージ パターンは一方向です。バインディング タイプは basicHttp です。最初のリクエストはワークフローを開始し、2 番目のリクエストは最初のリクエストに関連する特定のアクションを実行します。メッセージが確実に届くようにするために、クライアントを一定時間スリープさせて、ワークフローがリクエストを開始し、相関キーを確立できるようにします。ほとんどの場合、サービスへのリクエストは正常に処理されます。メッセージが表示されてワークフローが失敗することがある
「インスタンス キー 'xx' がインスタンスに関連付けられていないため、InstancePersistenceCommand の実行が中断されました。これは、インスタンスまたはキーがクリーンアップされたか、キーが無効であるために発生する可能性があります。メッセージが次の場合、キーが無効である可能性があります。生成元が間違った時間に送信されたか、正しくない相関データが含まれていました。」
このサービスは IIS でホストされており、現在 1 台のサーバーで実行されています。CanCreateInstance でマークされた Receive アクティビティが 1 つあります。このアクティビティがワークフローを開始し、pick アクティビティ内にある他の receive アクティビティがサービス コールに応答します。最初の receive アクティビティの後、および他の各アクティビティが受信した後、PromoteValueというアクティビティがあり、プロモートされたプロパティの参加者を通じてプロパティをプロモートします。このサービスの永続性の詳細の構成は、timeToPersist="00:01:00" timeToUnload="00:00:00" hostLockRenewalPeriod="00:00:30 です。
AllowBufferedReceive を使用し、ReceiveContext をサポートするチャネルを使用するようにサービスを設定する必要がありますか? 一方向ではなく双方向メッセージングを使用する必要があるため、ワークフローが最初の要求で終了するまでクライアントをブロックする必要があります。クライアントでワークフローへの呼び出しの間にスリープを使用することは望ましくありませんが、エラーの発生を防ぎます。