我有两个消息,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();
}
感谢,
传奇数据和传奇映射的代码至少是有帮助的。 –