首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有DTC的NServiceBus (AsA_Server)可能吗?

没有DTC的NServiceBus (AsA_Server)可能吗?
EN

Stack Overflow用户
提问于 2011-07-19 21:46:55
回答 4查看 2K关注 0票数 6

我是第一次使用NServiceBus,并且有一个小型、简单的应用程序,其中用户提交一个表单,然后将表单字段发送到队列,处理程序收集这些数据并使用linq- to -sql将其写入数据库。

就数据库管理员而言,组件服务中的任何更改都是完全禁止的,因此我现在正在寻找DTC的替代方案(在DB服务器上没有启用),但是使用AsA_Server,这样消息就不会被清除。

我尝试在IConfigureThisEndpoint之后删除AsA_Server并自己指定配置,但似乎不起作用(控制台出现,页面加载,但什么也没有发生,甚至不会在断点处停止)。AsA_Client确实可以工作,但据我所知,消息将在启动时被清除,这是我需要避免的。

有什么建议吗?

谢谢,

OMK

EDIT:现在已经解决了这个问题,方法是在suppress transaction作用域中包装对数据库的调用,这允许在没有环境事务的情况下完成数据库工作:

代码语言:javascript
复制
using (TransactionScope sc = new TransactionScope(TransactionScopeOption.Suppress)) 
{ 
     // code here 
     sc.Complete(); 
} 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-20 06:30:38

当您使用AsA_Server时,您指定了您想要的持久队列,并且您需要配置事务队列。

使用事务性发送/接收,MSMQ要求您将发送、传输、接收和处理作为一个事务的一部分。然而,实际上所有这些阶段都发生在自己的事务中。

例如,当发送者将消息发送到其本地MSMQ子系统时,发送事务就完成了(即使队列地址是远程的,发送者仍然将消息发送到充当远程队列的某种代理的本地队列)。

当发送者机器上的MSMQ子系统成功地将消息传输到接收者机器上的MSMQ子系统时,传输事务完成。

尽管这一切可能都发生在一台机器上,但我猜测您的Handle()方法正在向另一台机器上的数据库写入数据。

这里的问题是,为了从事务的角度令人满意地完成接收操作,您对数据库的调用必须成功。只有这样,消息才会从您的输入队列中出列。这可以防止消息在处理失败期间丢失。

但是,为了在整个网络中强制执行,您需要使用DTC来协调到数据库的分布式事务。

底线是,如果您希望在分布式环境中使用持久队列,那么您将需要使用MSDTC。

希望这能有所帮助。

票数 9
EN

Stack Overflow用户

发布于 2012-03-01 14:02:31

还有另一种选择。在您的连接字符串中,您可以添加不在分布式事务中登记的选项,这将在DTC中忽略您的DB连接。

当然,如果这是在配置中设置的,那么应用程序的所有数据库事务都会被DTC忽略,而不仅仅是特定的事务。

示例:

代码语言:javascript
复制
<add key="DatabaseConnectionString" value="Data Source=SERVERNAME;Initial Catalog=DBNAME;Integrated Security=True;Enlist=False"/>
票数 7
EN

Stack Overflow用户

发布于 2013-10-28 15:48:57

使用NServiceBus 4.0,您现在可以执行以下操作,这终于对我起作用了:

代码语言:javascript
复制
 Configure.Transactions.Advanced(t =>
                {
                    t.DisableDistributedTransactions();
                    t.DoNotWrapHandlersExecutionInATransactionScope();
                });
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6748170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档