我有兩個消息,clientChangeMessage(負責創建客戶端)和clientContractChangeMEssage(負責客戶端的預訂細節)。現在在我的數據庫中,一個客戶不能創建,直到它有客戶合同,反之亦然。在我的本地系統上,一切工作正常,即如果首先獲取客戶端更改消息,我將其存儲在傳奇中,並等待客戶端合同消息,當到達時,傳奇執行這兩個消息。但在我的測試機器上,當客戶端發生變化消息時,它會被存儲在傳奇中,但當客戶端合同發生變化時,傳奇並不會發現客戶端會改變傳奇故事,從而產生另一個傳奇故事。我嘗試了與我的測試人員嘗試的完全相同的消息,它在我的機器上運行,並且無法弄清楚可能會出現什麼問題。我正在使用烏鴉數據庫持久性。 (抱歉,我不能想粘貼這方面的任何代碼)佐賀錯誤nservicebus使用烏鴉db持久
ClientSagaState
public class ClientSagaState:IContainSagaData
{
#region NserviceBus
public Guid Id { get; set; }
public string Originator { get; set; }
public string OriginalMessageId { get; set; }
#endregion
public Guid ClientRef { get; set; }
public ClientMessage ClientChangeMessage { get; set; }
public ClientContractChangeMessage ClientContractChange { get; set; }
}
public class ClientSaga:Saga<ClientSagaState>,
IAmStartedByMessages<ClientChangeMessage>,
IAmStartedByMessages<ClientContractChangeMessage>
{
public override void ConfigureHowToFindSaga()
{
ConfigureMapping<ClientChangeMessage>(s => s.ClientRef, m => m.EntityRef);
ConfigureMapping<ClientContractChangeMessage>(s => s.ClientRef, m => m.PrimaryEntityRef);
}
public void Handle(ClientChangeMessage message)
{
if (BusRefTranslator.GetLocalRef(EntityTranslationNames.ClientChange, message.EntityRef.Value) != null)
{
GetHandler<ClientChangeMessage>().Handle(message);
CompleteTheSaga();
return;
}
HandleServiceUserChangeAndDependencies(message);
//MarkAsComplete();
CompleteTheSaga();
}
public void Handle(ClientContractChangeMessage message)
{
var state=this.Data;
//Some handling logic
//Check if client is not in database then store the state
state.ClientContractChange=message;
state.ClientRef =message.PrimaryEntityRef;
//if client is in the data base then
MarkAsComplete();
}
感謝,
傳奇數據和傳奇映射的代碼至少是有幫助的。 –