Vac*_*ano 2 msdtc entity-framework nservicebus
我有一个具有自托管WCF服务的解决方案.该服务连接到EF,可以读写.
在同一解决方案中,我还托管了一个NServiceBus端点.它从单独的运行解决方案中获取事件.
当我运行NServiceBus项目(单独)时,似乎工作正常,直到我尝试查询我的数据库.当我这样做时,我得到这个EntityException:
底层提供程序在Open上失败.
内部异常是TransactionException,消息为:
合作伙伴事务管理器已禁用其对远程/网络事务的支持
我的NServiceBus和WCF服务项目都使用完全相同的配置和EF项目.我不明白为什么一个失败而另一个失败.
我做了一些谷歌搜索并遇到了这个页面:http://msdn.microsoft.com/en-us/library/aa561924%28BTS.20%29.aspx向我展示了如何设置MSDTC,我在我的客户端上做到了机.但它没有效果.
我还发现这个问题需要设置:NServiceBus:System.Transactions.TransactionException:合作伙伴事务管理器已禁用其对远程/网络事务的支持.但它没有说明为什么或在哪里.
我是否需要在数据库服务器上设置MSDTC?如果是这样,为什么?什么是MSDTC?
为什么从NServiceBus托管进程运行会导致此错误?
更新:我发现这个链接帮助我了解DTC的作用.它还告诉我如何在需要时将其关闭:
using (TransactionScope sc=new TransactionScope(TransactionScopeOption.Suppress))
YourDatabaseHandler.SaveMyStuff(whatever);
Run Code Online (Sandbox Code Playgroud)
虽然在许多情况下听起来好像是好事.
由于NSB正在使用事务性队列,因此您将参与分布式事务.这意味着参与的每台机器都必须投票决定是否完成交易.这是通过分布式事务处理协调器(MSDTC)完成的.这必须在两台机器上运行(如果您使用其他数据库,如Oracle,则还有其他服务).要管理MSDTC,请转到组件服务 - >计算机 - >我的电脑 - >分布式事务处理协调器 - >本地DTC.右键单击该节点,您将找到包括安全性在内的所有配置.
| 归档时间: |
|
| 查看次数: |
1832 次 |
| 最近记录: |