事务管理器已禁用其对远程/网络事务的支持

Laj*_*pad 81 vb.net asp.net transactionscope

我正在使用SQL Server和ASP.NET.我有以下功能:

            Using js = daoFactory.CreateJoinScope()
                Using tran = New Transactions.TransactionScope()
                    '...
                    tran.Complete()
                End Using
            End Using
Run Code Online (Sandbox Code Playgroud)

但是,例外情况' 事务管理器已禁用其对远程/网络事务的支持.'被抛出.

JoinScope的描述:

Public Class JoinScope
    Implements IJoinScope
    Implements IDisposable
    '...
End Class
Run Code Online (Sandbox Code Playgroud)

我已经在另一个具有相同环境的应用程序中以这种方式工作而没有问题,但在这里我遇到了这个问题.我该怎么做才能解决这个问题?

Mag*_*nus 132

确保"分布式事务处理协调器"服务在数据库和客户端上都运行.另外,请确保选中"网络DTC访问","允许远程客户端","允许入站/出站"和"启用提示".

为MS DTC事务启用网络DTC访问

  1. 打开"组件服务"管理单元.

    要打开组件服务,请单击"启动".在搜索框中,键入dcomcnfg,然后按Enter.

  2. 展开控制台树以找到要为其启用网络MS DTC访问的DTC(例如,本地DTC).

  3. 在"操作"菜单上,单击"属性".

  4. 单击"安全"选项卡并进行以下更改:在"安全设置"中,选中"网络DTC访问"复选框.

    在"事务管理器通信"中,选中"允许入站"和"允许出站"复选框.

  • 确保对事务内的所有数据库调用使用相同的打开连接. (12认同)
  • 谢谢马格努斯.它必须是应用程序的设置,因为这种类型的事务使用相同的计算机,这意味着此问题与计算机无关. (3认同)
  • 10 年后,我们仍在处理这个问题,而您的解决方案是正确的。请注意,此 DTC 设置更改也必须在远程服务器上进行,而不仅仅是在客户端上进行。 (2认同)

Tod*_*Tod 10

我间歇地得到了这个问题,我按照这里的说明和其他地方非常相似.全部配置正确.

这个页面:http://sysadminwebsite.wordpress.com/2012/05/29/9/帮我找到了问题所在.

基本上我在两台服务器上都有MSDTC的重复CID.HKEY_CLASSES_ROOT\CID

请参阅:http://msdn.microsoft.com/en-us/library/aa561924.aspx部分确保为MSDTC分配了唯一的CID值

我正在使用虚拟服务器,我们的服务器团队喜欢为每个服务器使用相同的映像.这是一个简单的修复,我们不需要重启.但DTC服务确实需要设置为自动启动,并且需要在重新安装后启动.


Ami*_*ari 7

我有一个存储过程在“链接服务器”中调用另一个存储过程。当我在ssms中执行它时可以,但是在应用程序中(通过实体框架)调用时,出现此错误。本文对我有帮助,我使用了以下脚本:

EXEC sp_serveroption @server = 'LinkedServer IP or Name',@optname = 'remote proc transaction promotion', @optvalue = 'false' ;
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参见链接服务器:合作伙伴事务管理器已禁用其对远程/网络事务的支持

  • 欢迎提供解决方案的链接,但请确保您的答案在没有它的情况下也是有用的:[在链接周围添加上下文](//meta.stackexchange.com/a/8259),这样您的其他用户就会知道它是什么,并且为什么它在那里,然后引用您链接到的页面中最相关的部分,以防目标页面不可用。[仅是链接的答案可能会被删除。](//stackoverflow.com/help/deleted-answers) (2认同)

Dan*_*aar 5

在我的场景中,引发异常是因为我试图在一个已经存在的连接上的TransactionScope中创建一个新的连接实例:

例:

void someFunction()
{
    using (var db = new DBContext(GetConnectionString()))
    {
        using (var transaction = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
        {
            someOtherFunction(); // This function opens a new connection within this transaction, causing the exception.
        }
    }
}

void someOtherFunction()
{
    using (var db = new DBContext(GetConnectionString()))
    {
        db.Whatever // <- Exception.
    }
}
Run Code Online (Sandbox Code Playgroud)