尝试在Handler(本地Azure工作程序)中制作Bus.SendLocal时,该操作对于事务状态无效 [英] The operation is not valid for the state of the transaction when trying to make Bus.SendLocal in Handler (local Azure worker)

查看:84
本文介绍了尝试在Handler(本地Azure工作程序)中制作Bus.SendLocal时,该操作对于事务状态无效的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有下一个代码:

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
    }
}

错误消息:该操作对于事务状态无效.

error message: The operation is not valid for the state of the transaction.

堆栈跟踪:

* at System.Transactions.TransactionState.EnlistVolatile(InternalTransaction tx,IEnlistmentNotification enlistmentNotification,EnlistmentOptions enlistmentOptions,事务atomicTransaction) 在System.Transactions.Transaction.EnlistVolatile(IEnlistmentNotification enlistmentNotification,EnlistmentOptions enlistmentOptions) 在c:\ BuildAgent \ work \ ba77a0c29cee2af1 \ src \ NServiceBus.Azure.Transports.WindowsAzureStorageQueues \ AzureMessageQueueSender.cs中的NServiceBus.Azure.Transports.WindowsAzureStorageQueues.AzureMessageQueueSender.Send. 在NServiceBus.Unicast.UnicastBus.SendMessage(List 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:\AmiraProject\SourcesOfAmira-Tour\Amira\Amira.Merger.WorkerRole\Handlers\ProcessTPGFilesHandler.cs:line 161 at Amira.Merger.WorkerRole.Handlers.ProcessTPGFilesHandler.DeserializeAndSaveData() in d:\AmiraProject\SourcesOfAmira-Tour\Amira\Amira.Merger.WorkerRole\Handlers\ProcessTPGFilesHandler.cs:line 139 at Amira.Merger.WorkerRole.Handlers.ProcessTPGFilesHandler.Handle(StartProcessTPGFiles message) in d:\AmiraProject\SourcesOfAmira-Tour\Amira\Amira.Merger.WorkerRole\Handlers\ProcessTPGFilesHandler.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(对象处理程序,对象消息)处:第0行 在NServiceBus.Pipeline.Behaviors.LoadedMessageHandlers.b_ 2(对象处理程序实例,对象消息)中位于第0行 在:line 0中的NServiceBus.Pipeline.Behaviors.InvokeHandlersBehavior.DispatchMessageToHandlersBasedOnType(IBuilder builder,LogicalMessage toHandle,LoadedMessageHandlersloadedHandlers,BehaviorContext上下文)处 在NServiceBus.Pipeline.Behaviors.InvokeHandlersBehavior.Invoke(BehaviorContext context,Action next)在:line 0中 在NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context)中的位置:行0 在NServiceBus.Pipeline.BehaviorChain中.<> c _DisplayClass1.b_ 0()在第0行中 在NServiceBus.Sagas.SagaPersistenceBehavior.Invoke(BehaviorContext上下文,下一步)处:第0行 在NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context)中的第0行 在NServiceBus.Pipeline.BehaviorChain中.<> c _DisplayClass1.b_ 0()在第0行中 在NServiceBus.Pipeline.Behaviors.LoadHandlersBehavior.Invoke(BehaviorContext context,Action next)在:line 0中 在NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context)中的位置:行0 在NServiceBus.Pipeline.BehaviorChain中.<> c _DisplayClass1.b_ 0()在第0行中 在NServiceBus.Pipeline.Behaviors.CallbackInvocationBehavior.Invoke(BehaviorContext上下文,下一步操作)中的位置:第0行 在NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context)中的位置:行0 在NServiceBus.Pipeline.BehaviorChain中.<> c _DisplayClass1.b_ 0()在第0行中 在NServiceBus.Pipeline.Behaviors.ApplyIncomingMessageMutatorsBehavior.Invoke(BehaviorContext上下文,下一步操作)中的位置:行0 在NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context)中的位置:行0 在NServiceBus.Pipeline.BehaviorChain中.<> c _DisplayClass1.b_ 0()在第0行中 在NServiceBus.Pipeline.Behaviors.ExtractLogicalMessagesBehavior.Invoke(BehaviorContext context,Action next)在:line 0中 在NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context)中的位置:行0 在NServiceBus.Pipeline.BehaviorChain中.<> c _DisplayClass1.b_ 0()在第0行中 在NServiceBus.Pipeline.Behaviors.RaiseMessageReceivedBehavior.Invoke(BehaviorContext上下文,下一步操作)处:第0行 在NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context)中的位置:行0 在NServiceBus.Pipeline.BehaviorChain中.<> c _DisplayClass1.b_ 0()在第0行中 在NServiceBus.Pipeline.Behaviors.ApplyIncomingTransportMessageMutatorsBehavior.Invoke(BehaviorContext上下文,下一步操作)中:行0 在NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context)中的位置:行0 在NServiceBus.Pipeline.BehaviorChain中.<> c _DisplayClass1.b__0()在第0行中 在NServiceBus.UnitOfWork.UnitOfWorkBehavior.Invoke(BehaviorContext上下文,下一步)中的位置:行0 *

*at System.Transactions.TransactionState.EnlistVolatile(InternalTransaction tx, IEnlistmentNotification enlistmentNotification, EnlistmentOptions enlistmentOptions, Transaction atomicTransaction) at System.Transactions.Transaction.EnlistVolatile(IEnlistmentNotification enlistmentNotification, EnlistmentOptions enlistmentOptions) at NServiceBus.Azure.Transports.WindowsAzureStorageQueues.AzureMessageQueueSender.Send(TransportMessage message, Address address) in c:\BuildAgent\work\ba77a0c29cee2af1\src\NServiceBus.Azure.Transports.WindowsAzureStorageQueues\AzureMessageQueueSender.cs:line 51 at NServiceBus.Unicast.UnicastBus.SendMessage(List1 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:\AmiraProject\SourcesOfAmira-Tour\Amira\Amira.Merger.WorkerRole\Handlers\ProcessTPGFilesHandler.cs:line 161 at Amira.Merger.WorkerRole.Handlers.ProcessTPGFilesHandler.DeserializeAndSaveData() in d:\AmiraProject\SourcesOfAmira-Tour\Amira\Amira.Merger.WorkerRole\Handlers\ProcessTPGFilesHandler.cs:line 139 at Amira.Merger.WorkerRole.Handlers.ProcessTPGFilesHandler.Handle(StartProcessTPGFiles message) in d:\AmiraProject\SourcesOfAmira-Tour\Amira\Amira.Merger.WorkerRole\Handlers\ProcessTPGFilesHandler.cs:line 122 at lambda_method(Closure , Object , Object ) at NServiceBus.Unicast.HandlerInvocationCache.Invoke(Object handler, Object message, Dictionary2 dictionary) in :line 0 at NServiceBus.Unicast.HandlerInvocationCache.InvokeHandle(Object handler, Object message) in :line 0 at NServiceBus.Pipeline.Behaviors.LoadedMessageHandlers.b_2(Object handlerInstance, Object message) in :line 0 at NServiceBus.Pipeline.Behaviors.InvokeHandlersBehavior.DispatchMessageToHandlersBasedOnType(IBuilder builder, LogicalMessage toHandle, LoadedMessageHandlers loadedHandlers, BehaviorContext context) in :line 0 at NServiceBus.Pipeline.Behaviors.InvokeHandlersBehavior.Invoke(BehaviorContext context, Action next) in :line 0 at NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context) in :line 0 at NServiceBus.Pipeline.BehaviorChain.<>c_DisplayClass1.b_0() in :line 0 at NServiceBus.Sagas.SagaPersistenceBehavior.Invoke(BehaviorContext context, Action next) in :line 0 at NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context) in :line 0 at NServiceBus.Pipeline.BehaviorChain.<>c_DisplayClass1.b_0() in :line 0 at NServiceBus.Pipeline.Behaviors.LoadHandlersBehavior.Invoke(BehaviorContext context, Action next) in :line 0 at NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context) in :line 0 at NServiceBus.Pipeline.BehaviorChain.<>c_DisplayClass1.b_0() in :line 0 at NServiceBus.Pipeline.Behaviors.CallbackInvocationBehavior.Invoke(BehaviorContext context, Action next) in :line 0 at NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context) in :line 0 at NServiceBus.Pipeline.BehaviorChain.<>c_DisplayClass1.b_0() in :line 0 at NServiceBus.Pipeline.Behaviors.ApplyIncomingMessageMutatorsBehavior.Invoke(BehaviorContext context, Action next) in :line 0 at NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context) in :line 0 at NServiceBus.Pipeline.BehaviorChain.<>c_DisplayClass1.b_0() in :line 0 at NServiceBus.Pipeline.Behaviors.ExtractLogicalMessagesBehavior.Invoke(BehaviorContext context, Action next) in :line 0 at NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context) in :line 0 at NServiceBus.Pipeline.BehaviorChain.<>c_DisplayClass1.b_0() in :line 0 at NServiceBus.Pipeline.Behaviors.RaiseMessageReceivedBehavior.Invoke(BehaviorContext context, Action next) in :line 0 at NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context) in :line 0 at NServiceBus.Pipeline.BehaviorChain.<>c_DisplayClass1.b_0() in :line 0 at NServiceBus.Pipeline.Behaviors.ApplyIncomingTransportMessageMutatorsBehavior.Invoke(BehaviorContext context, Action next) in :line 0 at NServiceBus.Pipeline.BehaviorChain.InvokeNext(BehaviorContext context) in :line 0 at NServiceBus.Pipeline.BehaviorChain.<>c_DisplayClass1.b__0() in :line 0 at NServiceBus.UnitOfWork.UnitOfWorkBehavior.Invoke(BehaviorContext context, Action next) in :line 0*

有人可以帮我吗? 谢谢

can some one help me with this? thanks

推荐答案

Nsb处理程序被system.transactionscope包围.您可以在system.transaction-section中的app.config中更改默认超时. Nsb流利的配置中有一个事务设置; Configure.Transactions.Advanced,那里可能还有一个超时设置.

Nsb handlers is surrounded by a system.transactionscope. You can change the default timeout in app.config in the system.transaction-section. There is a transaction setting in the Nsb fluent config; Configure.Transactions.Advanced, there may be a timeout setting there as well.

maxtimeout是10分钟,如果您的操作超出了该时间,则必须在machine.config中进行更改(必须在启动任务上执行此操作).

The maxtimeout is 10 minutes, if youre operation is taking than that, you have to change this in machine.config (have to do this on a Startup-task).

高度

//彼得

这篇关于尝试在Handler(本地Azure工作程序)中制作Bus.SendLocal时,该操作对于事务状态无效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆