clientChangeMessage(クライアントの作成を担当)とclientContractChangeMEssage(クライアントの予約の詳細を担当)の2つのメッセージがあります。現在、私のデータベースでは、クライアント コントラクトがあるまでクライアントを作成できません。私のローカル システムではすべて正常に動作しています。つまり、最初にクライアント変更メッセージを取得した場合、それを saga に保存し、クライアント コントラクト メッセージを待ちます。それが到着すると、saga は両方のメッセージを実行します。しかし、私のテスター マシンでは、クライアント変更メッセージが来るとサガに保存されますが、クライアント コントラクトの変更が来ると、サガはクライアント変更サガを見つけられず、別のサガを作成します。テスターが試したのとまったく同じメッセージで試してみましたが、私のマシンで動作し、何が問題なのかわかりません。私はraven 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();
}
ありがとう、