Solución: La ubicación de recepción se reinicia cuando se usa el adaptador WCF-SQL o el adaptador WCF-Oracle en el Paquete de adaptadores de BizTalk

Se aplica a
BizTalk Adapters

Este artículo se aplica al siguiente producto:

  • BizTalk Adapter Pack 2.0
  • BizTalk Adapter Pack 2010

Síntomas

Cuando utiliza uno de los siguientes adaptadores incluidos en Microsoft BizTalk Adapter Pack 2.0 o en Microsoft BizTalk Adapter Pack 2010 en una ubicación de recepción, esta se reinicia de forma inesperada:

  • El adaptador de SQL de Windows Communication Foundation (WCF)
  • El adaptador WCF-Oracle

Además, BizTalk Server puede encontrar la excepción ConnectionException y, a continuación, es posible que el servidor BizTalk se reinicie después de que se registre una de las siguientes advertencias en el registro de aplicaciones.

Adaptador WCF-SQL

Advertencia 1

Nota

"El adaptador ""WCF-SQL"" generó un mensaje de error. Detalles ""System.ObjectDisposedException: No se puede tener acceso a un objeto eliminado.
Nombre del objeto: "Transaction".
en System.Transactions.Transaction.Rollback(Exception e)
en Microsoft.Adapters.Sql.SqlAdapterInboundHandler.TryReceive(TimeSpan timeout, Message& message, IInboundReply& reply)
en Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.TryReceive(TimeSpan timeout, Message& message)
en System.ServiceModel.Dispatcher.InputChannelBinder.TryReceive(TimeSpan timeout, RequestContext& requestContext)
en System.ServiceModel.Dispatcher.ErrorHandlingReceiver.TryReceive(TimeSpan timeout, RequestContext& requestContext)""."

Advertencia 2

Nota

"El adaptador ""WCF-SQL"" generó un mensaje de error. Detalles ""System.TimeoutException: Se produjo una excepción de tipo 'System.TimeoutException'.
en Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()
en Microsoft.Adapters.Sql.ExecutionHelper.ExecuteScalar(SqlCommand sqlCommand, TimeoutHelper timeoutHelper)
a las Microsoft.Adapters.Sql.SqlAdapterInboundHandler.Polling_WaitForMessage(TimeoutHelper, timeoutHelper)
en Microsoft.Adapters.Sql.SqlAdapterInboundHandler.WaitForMessage(TimeSpan timeout)
en Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)
en System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
en System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()""."

              

WCF-Oracle adaptador

Advertencia 1

Nota

El adaptador "WCF-Oracle" generó un mensaje de error. Details "Microsoft.ServiceModel.Channels.Common.ConnectionException: The timeout "00:02:00" expiró mientras se ejecutaba la función "WaitForMessage". >--- System.TimeoutException: El tiempo de espera "00:02:00" expiró mientras se ejecutaba la función "WaitForMessage".
   en Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()
   en Microsoft.Adapters.OracleCommon.OracleCommonUtils.SetCommandTimeout(comando OracleCommand, TimeoutHelper timeoutHelper)
   en Microsoft.Adapters.OracleCommon.OracleCommonUtils.ExecuteNonQuery(comando OracleCommand, OracleCommonExecutionHelper executionHelper)
   en Microsoft.Adapters.OracleDB.OracleDBConnection.OpenConnection(OracleCommonExecutionHelper executionHelper)
   --- Fin del seguimiento de la pila de excepción interna ---
   en Microsoft.Adapters.OracleDB.OracleDBConnection.OpenConnection(OracleCommonExecutionHelper executionHelper)
   en Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage(OracleCommonExecutionHelper executionHelper)
   en Microsoft.Adapters.OracleDB.OracleDBInboundContract.WaitForMessage(TimeSpan timeout)
   en Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)
   en System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
   en System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()".

Advertencia 2

Nota

El adaptador "WCF-Oracle" generó un mensaje de error. Detalles "System.TimeoutException: The timeout "00:02:00" expiró mientras se ejecutaba la función "WaitForMessage".
   en Microsoft.Adapters.AdapterUtilities.TimeoutHelper.GetRemainingTimeoutAndThrowDefaultExceptionMessageIfExpired()
   en Microsoft.Adapters.OracleCommon.OracleCommonUtils.SetCommandTimeout(comando OracleCommand, TimeoutHelper timeoutHelper)
   en Microsoft.Adapters.OracleCommon.OracleCommonUtils.ExecuteScalar(comando OracleCommand, OracleCommonExecutionHelper executionHelper)
   en Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage(OracleCommonExecutionHelper executionHelper, conexión OracleCommonConnectionWrapper)
   en Microsoft.Adapters.OracleDB.OracleDBInboundContract.Polling_WaitForMessage(OracleCommonExecutionHelper executionHelper)
   en Microsoft.Adapters.OracleDB.OracleDBInboundContract.WaitForMessage(TimeSpan timeout)
   en Microsoft.ServiceModel.Channels.Common.Channels.AdapterInputChannel.WaitForMessage(TimeSpan timeout)
   en System.ServiceModel.Dispatcher.InputChannelBinder.WaitForMessage(TimeSpan timeout)
   en System.ServiceModel.Dispatcher.ErrorHandlingReceiver.WaitForMessage()".

              

Causa

Este problema se produce porque la ubicación de recepción se reinicia de forma inesperada cuando el método WaitForMessage genera una excepción TimeoutException.

Cuando el método WaitForMessage genera una excepción TimeoutException, se llama al método TryReceive y, a continuación, el adaptador WCF-SQL o el adaptador WCF-Oracle revierten la transacción. Sin embargo, la operación de reversión puede generar una excepción ObjectDisposedException. Por lo tanto, se genera una de las advertencias que se mencionan en la sección "Síntomas".

Resolución

Información sobre la actualización acumulativa

Para BizTalk Adapter Pack 2010

La revisión que resuelve este problema se incluye en el paquete de actualización acumulativa 2 para BizTalk Adapter Pack 2010. Para obtener más información acerca de cómo obtener este paquete de actualizaciones acumulativas, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

2572999 paquete de actualización acumulativa 2 para BizTalk Adapter Pack 2010

Para BizTalk Adapter Pack 2.0

La revisión que resuelve este problema se incluye en el paquete de actualización acumulativa 3 para BizTalk Adapter Pack 2.0.

Para obtener más información acerca de cómo obtener el paquete de actualización acumulativa, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

2557150 paquete de actualización acumulativa 3 para BizTalk Adapter Pack 2.0

Nota: Esta revisión agrega las <etiquetas TraceIdentifier> y </TraceIdentifier> necesarias en el archivo de seguimiento WCF (.svcLog). Después de que la revisión agregue estas etiquetas, se corrige la salida de los archivos de seguimiento y la herramienta Service Trace Viewer (SvcTraceViewer.exe) abre archivos de seguimiento WCF grandes más rápidamente.

Los siguientes seguimientos de ::Exit carecen de las <etiquetas TraceIdentifier> y </TraceIdentifier> antes de aplicar esta revisión:

<Description>ExecuteNonQuery::Exit</Description>

<Description>OpenConnection::Exit</Description>

<Description>ExecuteScalar::Exit</Description>

<Description>Polling_WaitForMessage::Exit</Description>

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

Más información

Para obtener más información sobre el método IInputChannel.WaitForMessage, visite el siguiente sitio web de MSDN:

Información general sobre el método IInputChannel.WaitForMessage Para obtener más información sobre el método IInputChannel.TryReceive, visite el siguiente sitio web de MSDN:

Información general sobre el método IInputChannel.TryReceive Para obtener más información acerca de las revisiones de BizTalk Server, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

2003907 Información sobre revisiones de BizTalk Server