【问题标题】:TransactionScope error事务范围错误
【发布时间】:2013-01-25 22:58:12
【问题描述】:

当我尝试在下面的代码中打开第二个连接时看到以下错误:分布式事务管理器 (MSDTC) 的网络访问已被禁用。请使用组件服务管理工具在 MSDTC 的安全配置中启用 DTC 以进行网络访问。

Public Function Test()
        Using Scope = New TransactionScope
            getMailServer()
            getMailServer()
        End Using
    End Function

    Private Function getMailServer() As String
        Dim objCommand As SqlCommand, objCommand2 As SqlCommand
        Dim objCon As SqlConnection
        Dim intDeleteCount As Integer
        Dim objDR As SqlDataReader
        Dim strServer As String
        Try
            objCommand = New SqlCommand
            objCommand2 = New SqlCommand
            objCon = New SqlConnection(_ConString) 'taken from web.config
            objCon.Open()
            objCommand.Connection = objCon
            Using objCon
                Using objCommand
                    objCommand2.Connection = objCon
                    objCommand2.CommandText = "SELECT SMTPServer FROM dbServer"
                    objDR = objCommand2.ExecuteReader
                    Do While objDR.Read
                        strServer = objDR("SMTPServer")
                    Loop
                    objDR.Close()
                End Using
            End Using
            Return strServer
        Catch ex As Exception
            Throw
        Finally

        End Try

    End Function

请注意,我花了一些时间在谷歌上搜索这个,并且我尝试了一些在这个网站上发布的东西,例如重新启动服务中的分布式事务协调器。我还在某处读到过,分布式事务(具有多个连接对象的事务)应避免使用 TransactionScope。我不确定这是不是真的。

【问题讨论】:

    标签: vb.net transactions


    【解决方案1】:

    您可以使用TransactionScope 进行分布式事务。事实上,通过在 .NET 2.0 中引入TransactionScope,微软让 COM+ 摆脱了困境。这是一个非常好的举动,COM+ 太糟糕了。

    您需要为参与事务的所有计算机(运行您的代码的计算机以及运行数据库(或您可能正在使用的其他资源,例如 MSMQ)的计算机)配置 DTC 以进行网络访问。

    这里是how to enable DTC network access

    【讨论】:

    • 感谢 +1。您能否澄清一下您的意思:“您需要为网络访问配置 DTC”和“MSMQ”?
    • 我添加了一个有用的链接。 MSMQ 是微软的排队系统。如果您不使用它,请不要担心。只需在所有相关机器上正确配置 DTC。
    • 谢谢。你知道使用隐式和显式事务的区别吗?如果是这样,你能在这里回答我的问题吗:stackoverflow.com/questions/14253048/…?
    • 当然,这很容易。我会在那里回答。
    • 在您的回答中,您说:“所有参与交易的机器”。您能否确认您指的是参与事务的所有 SQL 服务器和托管 VB.NET/ASP.NET 应用程序的应用程序服务器?
    猜你喜欢
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多