NServiceBus IHandleTimeouts抛出SaganotFoundHandler

NServiceBus IHandleTimeouts抛出SaganotFoundHandler,nservicebus,nservicebus3,Nservicebus,Nservicebus3,我正在尝试在我的传奇中使用NServiceBus 3.0 ITimeoutState和IHandleTimeouts功能。我有以下代码剪贴。以下代码在NServiceBus.3.0.0-rc5上正常工作,没有任何问题。但是,当我用任何版本>3.0.0更新DLL时,saga超时没有按预期工作,它抛出了以下警告 2012-04-05 09:15:26267[Worker.5]INFO NServiceBus.Sagas.Impl.sagadispatcherfacture[(null)]-找不到id

我正在尝试在我的传奇中使用NServiceBus 3.0 ITimeoutState和IHandleTimeouts功能。我有以下代码剪贴。以下代码在NServiceBus.3.0.0-rc5上正常工作,没有任何问题。但是,当我用任何版本>3.0.0更新DLL时,saga超时没有按预期工作,它抛出了以下警告

2012-04-05 09:15:26267[Worker.5]INFO NServiceBus.Sagas.Impl.sagadispatcherfacture[(null)]-找不到id为9496c29e-f745-4ada-8212-99E4732492B\20920的消息类型SomeNameSpace.MySagaTimeout的saga。将调用SagaNotFoundHandlers

请帮我解决这个问题

超时消息:

public class MySagaTimeout : ITimeoutState
{
    public InputMessage1 Source { get; set; }
}
public class BrandMerchandisingRoot : Saga<MySagaState>,
                                          IAmStartedByMessages<InputMessage1>,
                                          IHandleTimeouts<MySagaTimeout>,
                                          IHandleMessages<MySagaTimeout>
{
      public void Handle(InputMessage1 message)
      {
        RequestUtcTimeout(5.Seconds(), new MySagaTimeout {Source = message});
      }

      public void Timeout(MySagaTimeout state)
      {
        //some other code here
      }

      public void Handle(MySagaTimeout message)
      {
         Timeout(message);
      }
}
Configure.With()
.StructureMapBuilder(ObjectFactory.Container)
.RunTimeoutManager()
.UseInMemoryTimeoutPersister()
.MsmqSubscriptionStorage()
.Sagas()
.UnicastBus();
传奇代码:

public class MySagaTimeout : ITimeoutState
{
    public InputMessage1 Source { get; set; }
}
public class BrandMerchandisingRoot : Saga<MySagaState>,
                                          IAmStartedByMessages<InputMessage1>,
                                          IHandleTimeouts<MySagaTimeout>,
                                          IHandleMessages<MySagaTimeout>
{
      public void Handle(InputMessage1 message)
      {
        RequestUtcTimeout(5.Seconds(), new MySagaTimeout {Source = message});
      }

      public void Timeout(MySagaTimeout state)
      {
        //some other code here
      }

      public void Handle(MySagaTimeout message)
      {
         Timeout(message);
      }
}
Configure.With()
.StructureMapBuilder(ObjectFactory.Container)
.RunTimeoutManager()
.UseInMemoryTimeoutPersister()
.MsmqSubscriptionStorage()
.Sagas()
.UnicastBus();
注意:我使用的是我自己的saga持久化器,我有它的实现
使用我后来添加的IHandleMessages检查它是否有用!当超时到达时,基础结构将调用ISagaPersister.Get(sagaId),因此IFindSagas不会帮助您。你能在你自己的持久化程序中设置一个断点来确保它被调用吗?是的!这真是太神奇了。它工作得很好。谢谢你的提示。抱歉,我的反馈更新得太晚了。请按“回答您自己的问题”并将其添加到回答中。然后单击accept answer,使其标记为绿色复选标记。