2012-04-12 38 views
62

Estoy usando SQL Server y ASP.NET. Tengo la siguiente función:El administrador de transacciones ha deshabilitado su soporte para transacciones remotas/de red

  Using js = daoFactory.CreateJoinScope() 
       Using tran = New Transactions.TransactionScope() 
        '... 
        tran.Complete() 
       End Using 
      End Using 

Sin embargo, la excepción 'El administrador de transacciones ha deshabilitado su soporte para las transacciones a distancia/red. 'se arroja.

Descripción de JoinScope:

Public Class JoinScope 
    Implements IJoinScope 
    Implements IDisposable 
    '... 
End Class 

he trabajado de esta manera en otra aplicación con el mismo entorno sin ningún problema, pero aquí tengo este problema. ¿Qué podría hacer para solucionar el problema?

+0

Hice los pasos que Magnus sugirió por primera vez para asegurarse de que tenía todas las bases cubiertas, por lo que hablar, y luego se las arregló para obtener un error sugiriendo que establezca habilitar clr en SQL Server, y eso funcionó para mí. https://msdn.microsoft.com/en-us/library/ms131048.aspx –

Respuesta

105

Asegúrese de que el servicio "Coordinador de transacciones distribuidas" es que se ejecuta en la base de datos y el cliente. También asegúrese de marcar "Acceso a DTC de red", "Permitir cliente remoto", "Permitir entrada/salida" y "Habilitar CONSEJO".

Para habilitar DTC desde la red de acceso para las transacciones de MS DTC

  1. Abrir los Servicios de componentes en.

    Para abrir Servicios de componentes, haga clic en Inicio. En el cuadro de búsqueda, escriba dcomcnfg y luego presione ENTER.

  2. Expanda el árbol de la consola para localizar el DTC (por ejemplo, DTC local) para el que desea habilitar el acceso al DTC de la red MS.

  3. En el menú Acción, haga clic en Propiedades.

  4. Haga clic en la ficha Seguridad y realice los siguientes cambios: En Configuración de seguridad, active la casilla de verificación Acceso a DTC de red.

    En Comunicación del gestor de transacciones, seleccione las casillas de verificación Permitir entrada y Permitir salientes.

+3

Gracias, Magnus. Debe ser una configuración de la aplicación, porque este tipo de transacción funcionó con las mismas computadoras, lo que significa que este problema no está relacionado con la máquina. –

+0

¿Has probado sin JoinScope? – Magnus

+0

Sí, lo hice. Lanza la misma excepción. –

8

Estaba recibiendo este problema intermitentemente, había seguido las instrucciones aquí y muy similares en otros lugares. Todo fue configurado correctamente.

Esta página: http://sysadminwebsite.wordpress.com/2012/05/29/9/ me ha ayudado a encontrar el problema.

Básicamente tenía CID duplicados para el MSDTC en ambos servidores. HKEY_CLASSES_ROOT \ CID

Ver: http://msdn.microsoft.com/en-us/library/aa561924.aspx sección Asegúrese de que MSDTC se le asigna un valor único de CID

estoy trabajando con servidores virtuales y nuestro equipo servidor le gusta usar la misma imagen para cada servidor. Es una solución simple y no necesitamos un reinicio. Pero el servicio DTC sí necesitaba configuración para el arranque automático y no tuvo que iniciarse después de la reinstalación.

0

En caso de que otros tienen el mismo problema:

que tenían un error similar sucediendo.Resultó que estaba envolviendo varias sentencias SQL en una transacción, donde una de ellas se ejecutó en un servidor vinculado (instrucción Merge en una declaración EXEC (...) AT Server). Resolví el problema abriendo una conexión por separado al servidor vinculado, encapsulando esa declaración en un intento ... capture y luego aborto la transacción en la conexión original en caso de que se desconecte la captura.

2

comentario de otro answer: "asegúrese de usar la misma conexión abierta para todas las llamadas bases de datos dentro de la transacción - Magnus" (No sabe cómo vincular los comentarios)

Nuestros usuarios son almacenados en una separo el DB de los datos con los que estaba trabajando en las transacciones. Al abrir la conexión db para obtener el usuario estaba causando este error para mí. Mover la otra conexión db y la búsqueda del usuario fuera del alcance de la transacción corrigió el error.

1

En mi caso, estaba siendo tirado la excepción porque yo estaba tratando de crear una nueva instancia de conexión dentro de un TransactionScope en una conexión ya existente:

Ejemplo:

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. 
    } 
} 
1

que tenía un procedimiento de almacenamiento que llaman a otra tienda Procedimiento en "servidor vinculado". Cuando lo ejecuto en sms, estaba bien, pero cuando lo llamo en la aplicación (por Entity Framework), recibí este error. Este artículo me ha ayudado y me utiliza este script:

EXEC sp_serveroption @server = 'LinkedServer IP or Name',@optname = 'remote proc transaction promotion', @optvalue = 'false' ; 

para más detalles vistazo a esto: Linked server : The partner transaction manager has disabled its support for remote/network transactions

+0

Un enlace a una solución es bienvenido, pero asegúrese de que su respuesta sea útil sin él: [agregue contexto alrededor del enlace] (// meta.stackexchange.com/a/8259) para que los demás usuarios tengan una idea de lo que es y por qué está allí, luego cita la parte más relevante de la página a la que estás enlazando en caso de que la página objetivo no esté disponible. [Las respuestas que son poco más que un enlace se pueden eliminar.] (// stackoverflow.com/help/deleted-answers) –

+0

Gracias por su consejo – AmirhosseinYari

+1

Esto resolvió mi problema, así que gracias por proporcionar esto. No sé por qué obtuvo un voto de -1, ya que funcionó para rectificar mi problema específico. –

Cuestiones relacionadas