2016-11-04 8 views
0

ワークフローが開始された後に呼び出すことができるReceiveアクティビティを持つワークフローデザイナで作成された単純なワークフローがあります。 Receiveは、ワークフローで生成し、最初のSendReplyアクティビティから戻ったGUIDであるコンテンツパラメータの1つに関連付けられます。ワークフローSendReplyが追加されたときの相関を受信

enter image description here

相関クエリ:SM:ボディ()/ xgSc:doSomethingの/ xgSc:私はこの試験方法でワークフローを実行することができ

をworkflowId:

[TestMethod] 
public void Test() 
{ 
    using (var client = new Test.ServiceClient()) 
    { 
     var workflowId = client.StartWorkflow(); 
     client.DoSomething(workflowId.Value); 
    } 
} 

これは素晴らしい作品、 SendReplyアクティビティをReceiveに追加すると、正しく関連付けられなくなり、DoSomethingを呼び出すときにこのエラーが発生します。

インスタンスキー 'aee2a4cc-24ec-9e0e-6f76-31ffe345ae27'がインスタンスに関連付けられていないため、InstancePersistenceCommandの実行が中断されました。これは、インスタンスまたはキー がクリーンアップされたか、またはキーが無効であるために発生します。キーは、それが生成されたメッセージが間違った 時間に送信されたか、間違った相関データが含まれていた場合は、無効である可能性があります( )。

enter image description here

がバックアウトSendReply活動を取り、それはとても何とかSendReply活動は相関関係を壊し、正常に動作します:

はここSendReply活性を持つワークフローです。

Receive/SendReplyペアとの相関を実装するにはどうすればよいですか?

答えて

0

SendReplyアクティビティが正しく機能するためには、CorrelationHandleオブジェクトを使用してリクエスト - 応答相関を設定する必要があります。

まず、新しいCorrelationHandleタイプの変数をReceiveおよびSendReplyアクティビティと同じスコープ(またはそれ以上)のワークフローに追加します。

Variable

そして、Receiveアクティビティを選択して、プロパティの[追加相関初期化子ウィンドウを開くためにCorrelationInitializers]ボタンをクリックしてくださいペイン。

「初期化子を追加」をクリックして、CorrelationHandle変数の名前を入力します。

相関型ComboBoxで「Request-reply correlation initializer」を選択し、「OK」をクリックしてウィンドウを閉じます。

enter image description here

また、あなたはそれが含まれているメッセージング活動への暗黙のCorrelationHandleを提供CorrelationScope、内部のレシーブとSendReply活動を置くことができます。

enter image description here

関連する問題