0

以下のコードで 2 番目の接続を開こうとすると、次のエラーが表示されます。分散トランザクション マネージャー (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

これをグーグルで検索するのに時間を費やしたことに注意してください。このWebサイトに投稿されたいくつかのことを試しました。たとえば、サービスの分散型トランザクションコーディネーターを再起動します。また、分散トランザクション (複数の接続オブジェクトを持つトランザクション) では TransactionScope の使用を避ける必要があることもどこかで読みました。これが本当かどうかはわかりません。

4

1 に答える 1

1

TransactionScope分散トランザクションに使用できます。実際、Microsoft は .NET 2.0 を導入TransactionScopeすることで、COM+ を悲惨な状態から解放しました。これは非常に良い動きでした。COM+ はひどかったです。

トランザクションに参加するすべてのマシン (コードを実行しているマシンと、データベース (または MSMQ などの使用している他のリソース) を実行しているマシン) でネットワーク アクセス用に DTC を構成する必要があります。

DTC ネットワーク アクセスを有効にする方法は次のとおりです。

于 2013-01-25T23:01:59.373 に答える