Estoy usando SQL Server y ASP.NET. Tengo la siguiente función:
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 desactivado su soporte para transacciones remotas / de red. ' es aventado.
Descripción de JoinScope:
Public Class JoinScope
Implements IJoinScope
Implements IDisposable
'...
End Class
Así he trabajado en otra aplicación con el mismo entorno sin problema, pero aquí tengo este problema. ¿Qué puedo hacer para solucionar el problema?
asp.net
vb.net
transactionscope
Lajos Arpad
fuente
fuente
Respuestas:
Asegúrese de que el servicio "Coordinador de transacciones distribuidas" se esté ejecutando tanto en la base de datos como en el cliente. También asegúrese de marcar "Acceso DTC de red", "Permitir cliente remoto", "Permitir entrante / saliente" y "Habilitar TIP".
Para habilitar el acceso a DTC de red para transacciones de MS DTC
Abra el complemento Servicios de componentes.
Para abrir Servicios de componentes, haga clic en Iniciar. En el cuadro de búsqueda, escriba dcomcnfg y presione ENTRAR.
Expanda el árbol de la consola para ubicar el DTC (por ejemplo, DTC local) para el que desea habilitar el acceso a la red MS DTC.
En el menú Acción, haga clic en Propiedades.
Haga clic en la ficha Seguridad y realice los siguientes cambios: En Configuración de seguridad, seleccione la casilla de verificación Acceso a DTC de red.
En Transaction Manager Communication, seleccione las casillas de verificación Permitir entrantes y Permitir salientes.
fuente
Recibía este problema de forma intermitente, había seguido las instrucciones aquí y otras muy similares en otros lugares. Todo se configuró correctamente.
Esta página: http://sysadminwebsite.wordpress.com/2012/05/29/9/ me ayudó a encontrar el problema.
Básicamente, tenía CID duplicados para el MSDTC en ambos servidores. HKEY_CLASSES_ROOT \ CID
Consulte: http://msdn.microsoft.com/en-us/library/aa561924.aspx sección Asegúrese de que a MSDTC se le asigne un valor de CID único
Estoy trabajando con servidores virtuales y a nuestro equipo de servidores le gusta usar la misma imagen para cada servidor. Es una solución simple y no necesitamos reiniciar. Pero el servicio DTC necesitaba configurarse en Inicio automático y debía iniciarse después de la reinstalación.
fuente
Tuve un procedimiento de tienda que llama a otro procedimiento de tienda en "servidor vinculado". Cuando lo ejecuto en ssms estaba bien, pero cuando lo llamo en la aplicación (Por Entity Framework), recibí este error. Este artículo me ayudó y usé este script:
EXEC sp_serveroption @server = 'LinkedServer IP or Name',@optname = 'remote proc transaction promotion', @optvalue = 'false' ;
para obtener más detalles, consulte esto: Servidor vinculado: el administrador de transacciones del socio ha desactivado su soporte para transacciones remotas / de red
fuente
En mi escenario, la excepción se lanzó porque 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. } }
fuente
Comentario de la respuesta : "asegúrese de usar la misma conexión abierta para todas las llamadas a la base de datos dentro de la transacción. - Magnus"
Nuestros usuarios se almacenan en una base de datos separada de los datos con los que estaba trabajando en las transacciones. Abrir la conexión db para obtener el usuario me estaba causando este error. Mover la otra conexión de base de datos y la búsqueda de usuarios fuera del alcance de la transacción solucionó el error.
fuente
Publico la siguiente solución aquí porque después de algunas búsquedas, aquí es donde aterricé, por lo que otros también pueden hacerlo. Estaba tratando de usar EF 6 para llamar a un procedimiento almacenado, pero tuve un error similar porque el procedimiento almacenado tenía un servidor vinculado .
La operación no se pudo realizar porque el proveedor OLE DB _ para el servidor vinculado _ no pudo comenzar una transacción distribuida
El administrador de transacciones del socio ha desactivado su soporte para transacciones remotas / de red *
Saltar al cliente SQL solucionó mi problema, lo que también me confirmó que era una cosa de EF.
Intento basado en el método generado por el modelo EF:
Intento basado en ExecuteSqlCommand:
db.Database.ExecuteSqlCommand("exec [SomeDB].[dbo].[SomeStoredProcedure]");
Con:
var connectionString = db.Database.Connection.ConnectionString; var connection = new System.Data.SqlClient.SqlConnection(connectionString); var cmd = connection.CreateCommand(); cmd.CommandText = "exec [SomeDB].[dbo].[SomeStoredProcedure]"; connection.Open(); var result = cmd.ExecuteNonQuery();
Ese código se puede acortar, pero creo que la versión es un poco más conveniente para depurar y avanzar.
No creo que Sql Client sea necesariamente una opción preferida, pero sentí que al menos valía la pena compartir esto si alguien más que tiene problemas similares llega aquí por Google.
El código anterior es C #, pero el concepto de intentar cambiar a Sql Client aún se aplica. Por lo menos, será diagnóstico intentar hacerlo.
fuente
Si no pudo encontrar el DTC local en los servicios de componentes, intente ejecutar primero este script de PowerShell:
$DTCSettings = @( "NetworkDtcAccess", # Network DTC Access "NetworkDtcAccessClients", # Allow Remote Clients ( Client and Administration) "NetworkDtcAccessAdmin", # Allow Remote Administration ( Client and Administration) "NetworkDtcAccessTransactions", # (Transaction Manager Communication ) "NetworkDtcAccessInbound", # Allow Inbound (Transaction Manager Communication ) "NetworkDtcAccessOutbound" , # Allow Outbound (Transaction Manager Communication ) "XaTransactions", # Enable XA Transactions "LuTransactions" # Enable SNA LU 6.2 Transactions ) foreach($setting in $DTCSettings) { Set-ItemProperty -Path HKLM:\Software\Microsoft\MSDTC\Security -Name $setting -Value 1 } Restart-Service msdtc
¡Y aparece!
Fuente: el administrador de transacciones del socio ha inhabilitado su soporte para transacciones remotas / de red
fuente
En caso de que otros tengan el mismo problema:
Tuve un error similar. resultó que estaba envolviendo varias sentencias SQL en una transacción, donde una de ellas se ejecutó en un servidor vinculado (sentencia Merge en una sentencia EXEC (...) AT Server). Resolví el problema abriendo una conexión separada al servidor vinculado, encapsulando esa declaración en un intento ... captura y luego aborto la transacción en la conexión original en caso de que se active la captura.
fuente
Tuve el mismo mensaje de error. Para mí, cambiar
pooling=False
a;pooling=true;Max Pool Size=200
en la cadena de conexión solucionó el problema.fuente
Tenía este problema con un servidor vinculado en SSMS mientras intentaba crear un procedimiento almacenado.
En el servidor vinculado, cambié la opción del servidor "Habilitar promoción en transacciones distribuidas" a Falso.
Captura de pantalla de las opciones del servidor
fuente