我正在尝试使用TransactionScope
,但继续出现下面的异常。
如果这很重要的话,应用程序与数据库运行在不同的机器上。我正在使用 SQL Server 2005。
分布式事务管理器 (MSDTC) 的网络访问已被禁用。请在安全配置中启用网络访问DTC
对于使用组件服务管理工具的 MSDTC。
using (TransactionScope tsTransScope = new TransactionScope())
{
//Do stuff here
tsTransScope.Complete();
}
Edit
我根据反馈做了一些修改。现在我收到此错误:
“对 COM 组件的调用返回了错误 HRESULT E_FAIL。”
“与底层事务管理器的通信失败。”
Solution我认为接受的答案解决了我遇到的最初问题。第二个错误似乎特定于实体框架。我将为此发布另一个问题。
以下是客户端的属性:
客户端 http://www.portnine.com/data/images/Misc/client.jpg http://www.portnine.com/data/images/Misc/client.jpg
以下是服务器上的属性:
服务器http://www.portnine.com/data/images/Misc/server.jpg http://www.portnine.com/data/images/Misc/server.jpg
您需要按照本节所述启用网络 DTC 访问微软 TechNet 文章 http://technet.microsoft.com/en-us/library/cc753510.aspx。可能必须在数据库和应用程序服务器上进行此更改。通常,DTC 已经在数据库服务器上打开,因此我会首先查看应用程序服务器。
Here is a screen shot of what we use except for the "Allow Remote Administration" option:
![Security Configuration Screenshot](https://i.stack.imgur.com/8YOq7.png)
我还没有遇到您现在遇到的 HRESULT E_Fail 问题,但这篇文章关于XP SP2 和交易 http://blogs.msdn.com/florinlazar/archive/2004/06/18/159127.aspx有这个有趣的建议:
您的另一个配置设置
需要注意(虽然我认为
这是一种不常见的情况)是
RestrictRemoteClients 注册表项。如果
该键的值设置为2
(RPC_RESTRICT_REMOTE_CLIENT_HIGH) 然后
MSDTC 网络交易不会
能够正常工作。 MSDTC 支持
仅 RPC_RESTRICT_REMOTE_CLIENT_NONE
(0) 和
RPC_RESTRICT_REMOTE_CLIENT_DEFAULT (1)
价值观。看http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2netwk.mspx#XSLTsection128121120120 http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2netwk.mspx#XSLTsection128121120120了解更多信息
限制远程客户端。
最后,虽然不是针对您的问题,但使用时需要注意的一个非常重要的事情TransactionScope
类是它的默认设置是利用可串行化的事务隔离级别 http://en.wikipedia.org/wiki/Isolation_%28database_systems%29#Serializable。可串行化是限制性最强的隔离级别,坦率地说,它被选为默认值令人惊讶。如果您不需要这种级别的锁定,我强烈建议在实例化时将隔离级别设置为限制较少的选项(ReadCommited)TransactionScope
:
var scopeOptions = new TransactionOptions();
scopeOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
scopeOptions.Timeout = TimeSpan.MaxValue;
using (var scope = new TransactionScope(TransactionScopeOption.Required,
scopeOptions))
{
// your code here
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)