试图制作总线时,该操作对于交易状态无效



我有下一个代码:

class ProcessHandler : IHandleMessages<StartProcess>
{
    public IBus Bus { get; set; }
    public void Handle(StartProcess message)
    {
        //some long living process (over 3 min)
        Bus.SendLocal(new SameMessage()); //get error here
    }
}

错误消息:该操作对交易状态无效。

堆栈跟踪:

*在System.Transactions.TransactionState.EnlistVolatile(内部交易TX,IenlistmentNotification notification entermentNotification,ExtermentmentOptions entermentment gentermentmentions,Transaction atomicicransaction) 在System.Transactions.transaction.enlistvolatile(Ienlistmentnotification gristmentNotification,entristmentOptions entermentmentOptions) 在nservicebus.azure.azure.transports.windowsazurestoragequequeues.azuremessagequeuesender.send(运输媒介消息,地址,地址)中的C: buildagent work ba77a0c29cee2af1 在nservicebus.unicast.unicastbus.sendmessage(列表 1 addresses, String correlationId, MessageIntentEnum messageIntent, Object[] messages) in :line 0 at NServiceBus.Unicast.UnicastBus.SendMessage(Address address, String correlationId, MessageIntentEnum messageIntent, Object[] messages) in :line 0 at NServiceBus.Unicast.UnicastBus.Send(Address address, Object[] messages) in :line 0 at NServiceBus.Unicast.UnicastBus.SendLocal(Object[] messages) in :line 0 at NServiceBus.Unicast.UnicastBus.SendLocal(Object message) in :line 0 at Amira.Merger.WorkerRole.Handlers.ProcessTPGFilesHandler.SaveToDataBase(TourML tourMLObj) in d:AmiraProjectSourcesOfAmira-TourAmiraAmira.Merger.WorkerRoleHandlersProcessTPGFilesHandler.cs:line 161 at Amira.Merger.WorkerRole.Handlers.ProcessTPGFilesHandler.DeserializeAndSaveData() in d:AmiraProjectSourcesOfAmira-TourAmiraAmira.Merger.WorkerRoleHandlersProcessTPGFilesHandler.cs:line 139 at Amira.Merger.WorkerRole.Handlers.ProcessTPGFilesHandler.Handle(StartProcessTPGFiles message) in d:AmiraProjectSourcesOfAmira-TourAmiraAmira.Merger.WorkerRoleHandlersProcessTPGFilesHandler.cs:line 122 at lambda_method(Closure , Object , Object ) at NServiceBus.Unicast.HandlerInvocationCache.Invoke(Object handler, Object message, Dictionary 2词典)中:第0行 在nservicebus.unicast.handlerinvocationcache.invokehandle(对象处理程序,对象消息)in:0行0 在nservicebus.pipeline.behaviors.bohaviors.boladedmessagehandlers.b_ 2(对象处理式,对象消息)in:LINE 0 在nservicebus.pipeline.behaviors.invokehandlersbehavior.dispatchmessagetohandlersbasedontype(ibuilder builder builder,LogicalMessage tohandle,LoadedMessageHandlers,loadedMessageHandlers loadedHandlers loadedHandlers locutionDhandlers locationContext上下文)in:line 0 在nservicebus.pipeline.behaviors.invokehandlersbehavior.invoke(行为context上下文,操作下一个) 在nservicebus.pipeline.behaviorchain.invokenext(行为context上下文)中 在nservicebus.pipeline.behaviorchain。 在nservicebus.sagas.sagapersistencebehavior.invoke(行为context上下文,动作下一个) 在nservicebus.pipeline.behaviorchain.invokenext(行为context上下文)中 在nservicebus.pipeline.behaviorchain。 在nservicebus.pipeline.behaviors.behaviors.loadhandlersbehavior.invoke(行为context上下文,操作下一个) 在nservicebus.pipeline.behaviorchain.invokenext(行为context上下文)中 在nservicebus.pipeline.behaviorchain。 在nservicebus.pipeline.behaviors.callbackinvocation behavior.invoke(行为context上下文,动作下一个) 在nservicebus.pipeline.behaviorchain.invokenext(行为context上下文)中 在nservicebus.pipeline.behaviorchain。 在nservicebus.pipeline.behaviors.applyincomingmessagemutatorsbehavior.invoke(行为context上下文,动作下一个) 在nservicebus.pipeline.behaviorchain.invokenext(行为context上下文)中 在nservicebus.pipeline.behaviorchain。 在nservicebus.pipeline.behaviors.extractLogicalMessagesBehavior.Invoke(行为context上下文,动作下一个) 在nservicebus.pipeline.behaviorchain.invokenext(行为context上下文)中 在nservicebus.pipeline.behaviorchain。 在nservicebus.pipeline.behaviors.behaviors.raisemessagereceivedbehavior.invoke(行为context上下文,动作下一个) 在nservicebus.pipeline.behaviorchain.invokenext(行为context上下文)中 在nservicebus.pipeline.behaviorchain。 在nservicebus.pipeline.behaviors.applyincomingtransportmessagemutatorsbehavior.invoke(行为context上下文,动作,下一个) 在nservicebus.pipeline.behaviorchain.invokenext(行为context上下文)中 在nservicebus.pipeline.behaviorchain。 在nservicebus.unitofwork.unitofworkbehavior.invoke(行为context上下文,动作下一个)in:line 0*

有人可以帮助我吗?谢谢

NSB处理程序被System.TransactionsCope包围。您可以更改System.Transaction Section中app.config中的默认超时。NSB Fluent配置中有一个事务设置;configure.transactions.Advanced,那里也可能有一个超时设置。

maxtimeout是10分钟,如果您的操作比这比这是10分钟,则必须在Machine.config中更改此操作(必须在启动任务上执行此操作)。

hth

//peter

最新更新