gpt4 book ai didi

c# - 生产环境中transactionScope和ServiceBus的问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:51 26 4
gpt4 key购买 nike

我见过其他有类似问题的人,但我还没有找到可行的解决方案。

我在调用数据库和 ServiceBus 时使用事务。

我正在为我的数据库使用 UnitOfWork/EntityFramework。

这是我的代码

/*Creating the list and adding to UnitOfWork repository*/
....
using (TransactionScope scope = new TransactionScope())
{
_unitOfWork.Save();
ExportGroups(myGroupList);
scope.Complete();
}

这是 ExportGroups 函数的一个片段

public void ExportGroups(IEnumerable<Group> groups)
{
/*Generating BrokeredMessage message*/
Task.Factory.StartNew(() =>
{
MessagingFactory factory = CreateMessagingFactory(...);
if (factory != null)
{
var sender = factory.CreateMessageSender(topicName);
sender.Send(message);
}
}).Wait();

}

这在我的开发环境中没有任何问题。但是当我们将其投入生产时,出现以下错误

“System.InvalidOperationException:其他资源管理器/DTC 不支持本地事务。”

机器上启用了 DTC,我们用它来处理其他事务就好了,尽管它们都没有使用其中的 ServiceBus。

[编辑 = 添加堆栈跟踪]

Server stack trace: 
at Microsoft.ServiceBus.Messaging.Sbmp.SbmpResourceManager.EnlistAsyncResult..ctor(SbmpResourceManager resourceManager, Transaction transaction, IRequestSessionChannel channel, SbmpMessageCreator messageCreator, Action`1 partitionInfoSetter, TimeSpan timeout, AsyncCallback callback, Object state)
at Microsoft.ServiceBus.Messaging.Sbmp.SbmpResourceManager.BeginEnlist(Transaction transaction, IRequestSessionChannel channel, SbmpMessageCreator messageCreator, Action`1 partitionInfoSetter, TimeSpan timeout, AsyncCallback callback, Object state)
at Microsoft.ServiceBus.Messaging.Sbmp.SbmpTransactionalAsyncResult`1.<>c__DisplayClass3e.<GetAsyncSteps>b__38(TIteratorAsyncResult thisPtr, TimeSpan t, AsyncCallback c, Object s)
at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.EnumerateSteps(CurrentThreadType state)
at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.Start()

Exception rethrown at [0]:
at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.EndSendCommand(IAsyncResult result)
at Microsoft.ServiceBus.Messaging.Sbmp.SbmpMessageSender.OnEndSend(IAsyncResult result)
at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.EnumerateSteps(CurrentThreadType state)

Exception rethrown at [1]:
at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
at Microsoft.ServiceBus.Messaging.IteratorAsyncResult`1.RunSynchronously()
at Microsoft.ServiceBus.Messaging.MessageSender.Send(TrackingContext trackingContext, IEnumerable`1 messages, TimeSpan timeout)
at System.Threading.Tasks.Task.Execute()
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.Wait()
at ....GroupService.ExportGroups(IEnumerable<Group> groups)

最佳答案

不支持跨不同 Windows Azure 服务的事务。也就是说有很多ways to send messages to service bus with transactional guarantees .

喂!查看

关于c# - 生产环境中transactionScope和ServiceBus的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26298271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com