0

当我尝试在下面的代码中打开第二个连接时看到以下错误:分布式事务管理器 (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。我不确定这是否属实。

4

1 回答 1

1

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

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

下面介绍如何启用 DTC 网络访问

于 2013-01-25T23:01:59.373 回答