Not*_*Dan 36 .net c# database transactions transactionscope
我正在尝试使用TransactionScope,但继续获得下面的例外.
如果这很重要,应用程序将在与数据库不同的计算机上运行.我正在使用SQL Server 2005.
已禁用分布式事务管理器(MSDTC)的网络访问.请使用组件服务管理工具在MSDTC的安全配置中启用DTC以进行网络访问.
using (TransactionScope tsTransScope = new TransactionScope())
{
//Do stuff here
tsTransScope.Complete();
}
Run Code Online (Sandbox Code Playgroud)
编辑
我根据反馈做了一些改变.现在我收到这个错误:
"错误HRESULT E_FAIL已从调用COM组件返回."
"与基础交易经理的沟通失败了."
解决方案 我认为接受的答案解决了我遇到的最初问题.第二个错误似乎特定于Entity Framework.我会发布另一个问题.
以下是客户端上的属性:
客户端http://www.portnine.com/data/images/Misc/client.jpg
以下是服务器上的属性:
Server http://www.portnine.com/data/images/Misc/server.jpg
ahs*_*ele 33
您需要按照此Microsoft TechNet文章中的说明启用网络DTC访问.可能必须在数据库和应用程序服务器上进行此更改.通常DTC已经打开数据库服务器,所以我先看看应用程序服务器.
以下是我们使用的屏幕截图,但"允许远程管理"选项除外:

我没有遇到你现在遇到的HRESULT E_Fail问题但是这篇关于XP SP2和交易的文章有这个有趣的建议:
您需要注意的另一个配置设置(虽然我认为这是一个不常见的情况)是RestrictRemoteClients注册表项.如果此键的值设置为2(RPC_RESTRICT_REMOTE_CLIENT_HIGH),则MSDTC网络事务将无法正常工作.MSDTC仅支持RPC_RESTRICT_REMOTE_CLIENT_NONE(0)和RPC_RESTRICT_REMOTE_CLIENT_DEFAULT(1)值.有关 RestrictRemoteClients的详细信息,请参阅 http://www.microsoft.com/technet/prodtechnol/winxppro/maintain/sp2netwk.mspx#XSLTsection128121120120.
最后,虽然不是特定于您的问题,但关于使用TransactionScope该类的一个非常重要的事情是它的默认设置是使用Serializable的事务隔离级别.Serializable是最严格的隔离级别,坦率地说,它被选为默认级别.如果您不需要这种级别的锁定,我强烈建议在实例化时将隔离级别设置为限制较少的选项(ReadCommitted)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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41017 次 |
| 最近记录: |