2016-11-04 10 views
0

我在工作流設計器中創建了一個簡單的工作流,該工作流設計器具有可在工作流啓動後調用的Receive活動。接收與其中一個內容參數關聯,這是我在工作流程中生成的GUID,並從最初的SendReply活動返回。添加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活動添加到接收時,它不再正確關聯,並且在調用DoSomething時出現此錯誤:

InstancePersistenceCommand的執行被中斷,因爲 實例關鍵字'aee2a4cc-24ec-9e0e-6f76-31ffe345ae27'不是 與實例關聯。這可能是因爲實例或密鑰 已被清除,或者因爲密鑰無效。如果從其生成的消息在錯誤的 時間發送或包含不正確的關聯數據,則密鑰可能是 無效。

下面是與SendReply活動的工作流程:

enter image description here

採取SendReply活動回來,這工作得很好,所以不知何故SendReply活動打破了關係。

如何實現與Receive/SendReply對的關聯?

回答

0

爲使SendReply活動正常工作,請求 - 應答關聯必須使用CorrelationHandle對象進行設置。

首先,在Receive和SendReply活動的相同作用域(或更高)中向工作流中添加一個新的CorrelationHandle類型變量。

Variable

然後選擇Receive活動,並在屬性窗格中單擊CorrelationInitializers按鈕打開添加相關初始值設定窗口。

單擊「添加初始化程序」並輸入CorrelationHandle變量的名稱。

在關聯類型ComboBox中選擇「Request-reply correlation initializer」,然後單擊OK關閉該窗口。

enter image description here

或者,你可以把一個CorrelationScope,它提供了一種隱含CorrelationHandle到它所包含的消息活動內收到和SendReply活動。

enter image description here

相關問題