Solución de problemas operativos con el adaptador de SQL
En esta sección se describe el uso de técnicas de solución de problemas para resolver errores operativos que puede encontrar al usar el adaptador de Microsoft BizTalk para SQL Server.
La habilitación del seguimiento
Debe habilitar el seguimiento entre el adaptador, el SDK del adaptador de LOB de WCF y SQL Server para recopilar más información sobre los problemas que encuentre al usar el adaptador de SQL. Para obtener más información sobre la compatibilidad con el seguimiento en el adaptador de SQL, vea Seguimiento de diagnóstico y registro de mensajes en el adaptador de SQL.
Problemas conocidos
A continuación se muestran los errores más comunes que puede encontrar al usar el adaptador de SQL, junto con su causa y resolución probables.
Error al cargar los enlaces del adaptador
Problema
Al intentar iniciar el complemento Agregar referencia de servicio de adaptador de Visual Studio o el complemento Consumir servicio de adaptador de BizTalk Project, obtendrá el siguiente error:
There was an error loading the binding, <binding name>, from your system configuration.
ConfigurationErrorsException: Exception has been thrown by the target of an invocation.
Causa
Al intentar iniciar el complemento agregar referencia de servicio de adaptador o el complemento Consumir servicio adaptador, WCF carga los enlaces de adaptador para todos los adaptadores instalados. A su vez, los enlaces del adaptador dependen del software cliente específico para la aplicación empresarial. Es posible que se enfrente a este problema si realizó una instalación típica o completa del adaptador, que instala todos los adaptadores contenidos en el paquete de adaptadores de BizTalk. Sin embargo, es posible que las bibliotecas cliente de LOB se instalen solo para una aplicación empresarial. Como resultado, la GUI no puede cargar los enlaces para los otros adaptadores.
Resolución
Asegúrese de realizar una instalación personalizada de los adaptadores para instalar solo el adaptador que necesita.
El adaptador de SQL no se muestra en la lista de adaptadores de BizTalk Server consola de administración
Problema
A diferencia de la versión anterior de los adaptadores enviados con BizTalk Server, el adaptador de SQL incluido con el paquete de adaptadores de BizTalk no aparece en la lista de adaptadores de la consola de administración de BizTalk Server.
Causa
El adaptador de SQL más reciente es un enlace personalizado de WCF. Por lo tanto, aunque la consola de administración de BizTalk Server muestra el adaptador de WCF-Custom, no muestra los enlaces personalizados de WCF y, por tanto, no muestra el adaptador de SQL basado en WCF.
Resolución
Puede agregar explícitamente el adaptador de SQL a la consola de administración de BizTalk Server siguiendo los pasos mencionados en Adición del adaptador de SQL a BizTalk Server Consola de administración.
Error al realizar operaciones en una base de datos SQL Server
Problema
El adaptador proporciona el siguiente error al realizar cualquier operación en una base de datos de SQL Server mediante BizTalk Server.
Para BizTalk Server
System.ArgumentNullException: Value cannot be null.
Causa
No se especifica la acción WCF del mensaje. WCF requiere que se especifique una acción SOAP para cada operación, que informa al adaptador sobre la operación que se va a realizar en la aplicación loB.
Resolución
Especifique la acción SOAP en el puerto de envío o como una propiedad de contexto de mensaje en una orquestación de BizTalk. Para obtener instrucciones, consulte Configuración de la acción SOAP para el adaptador de SQL. Consulte Mensajes y esquemas de mensajes para ver una lista de acciones para cada operación.
InvalidOperationException con ErrorCode=5 al realizar operaciones FILESTREAM
Problema
Obtiene el siguiente error al usar el adaptador de SQL para realizar operaciones filestream.
System.InvalidOperationException: OpenSqlFileStream returned error.
ErrorCode:5
Causa
Es posible que haya especificado credenciales de base de datos para conectarse a la base de datos SQL Server. Para realizar operaciones FILESTREAM, siempre debe usar la autenticación de Windows. El código de error "5" indica que se deniega el acceso debido a credenciales incorrectas. Para obtener más información sobre los diferentes códigos de error, vea Códigos de error del sistema (0-499).
Resolución
Use la autenticación de Windows para conectarse a la base de datos de SQL Server. En BizTalk Server consola de administración, puede hacerlo dejando los campos de nombre de usuario y contraseña en blanco en el cuadro de diálogo de configuración de puerto de WCF-Custom o WCF-SQL.
La operación de sondeo no devuelve ningún mensaje aunque se especifiquen instrucciones válidas para PollingStatement y PolledDataAvailableStatement
Problema
Incluso si se especifican valores válidos para las propiedades de enlace PollingStatement y PolledDataAvailableStatement, el adaptador no recibe un mensaje de sondeo de SQL Server.
Causa
Compruebe si alguna otra transacción ha tomado un bloqueo en la tabla en la que el adaptador está sondeando.
Resolución
Si desea sondear una tabla que se está actualizando como parte de otra transacción, puede considerar el uso del parámetro "with (nolock)" como parte de la consulta especificada para la propiedad de enlace PolledDataAvailableStatement para asegurarse de que los datos se devuelven incluso si la otra transacción impone un bloqueo. Para obtener más información, vea Bloqueo de SQL en el motor de base de datos.
El adaptador no puede insertar, actualizar o eliminar grandes volúmenes de datos en una sola operación mediante BizTalk Server
Problema
El adaptador de SQL no puede insertar, actualizar o eliminar grandes volúmenes de datos en una sola operación mediante BizTalk Server.
Causa
La inserción, actualización o eliminación de grandes volúmenes de datos puede tardar tiempo y el adaptador de SQL o la transacción en la que se realiza la operación, puede agotar el tiempo de espera.
Resolución
Para BizTalk Server
Especifique el tiempo de espera del adaptador WCF en el machine.config. Vaya al archivo machine.config en <la unidad> del sistema:\WINDOWS\Microsoft.NET\Framework\<version>\CONFIG y agregue el extracto similar al siguiente.
<configuration> <system.transactions> <machineSettings maxTimeout="02:00:00" /> </system.transactions> </configuration>
Con esta configuración, el tiempo de espera del adaptador wcF se establece en 2 horas.
Especifique la configuración de tiempo de espera para las transacciones MSDTC en el machine.config. Vaya al archivo machine.config en <la unidad> del sistema:\WINDOWS\Microsoft.NET\Framework\<version>\CONFIG y agregue el extracto similar al siguiente.
<system.transactions> <defaultSettings distributedTransactionManagerName="<computer_name>" timeout="02:00:00"/> </system.transactions>
Con esta configuración, el tiempo de espera de MSDTC se establece en 2 horas. El valor predeterminado para el tiempo de espera de MSDTC es de 10 minutos.
Importante
Debe realizar este cambio en los equipos que ejecutan el cliente del adaptador y SQL Server. En el extracto, reemplace <computer_name> por el nombre del equipo que ejecuta el cliente del adaptador y SQL Server.
Establezca la propiedad de enlace SendTimeout para el adaptador de SQL en un valor bastante grande. Para obtener instrucciones sobre cómo establecer las propiedades de enlace, consulte Configuración de las propiedades de enlace para el adaptador de SQL.
Se produce un error en la validación completa del esquema en BizTalk Server para los mensajes de respuesta que contienen DataSet
Problema
En el caso de las operaciones que devuelven un mensaje de respuesta que contiene un dataSet, por ejemplo, ExecuteReader, se produce un error en la validación de esquema completa en BizTalk Server.
Resolución
Se recomienda no realizar una validación de esquema completa para los mensajes de respuesta que contienen un conjunto de datos. En su lugar, podría hacer lo siguiente:
Ejecute la operación una vez que devuelva el mensaje de respuesta con el esquema.
Copie el esquema del mensaje de respuesta en un archivo .xsd y agregue este archivo al proyecto de BizTalk.
Use una consulta xpath en la orquestación para extraer los datos del mensaje de respuesta.
Error con RootNode TypeName en proyectos de BizTalk
Problema
En un proyecto de BizTalk en Visual Studio, si los esquemas generados a partir del complemento Consumir servicio de adaptador contienen caracteres no válidos o palabras reservadas para la propiedad RootNode TypeName , se producirá el siguiente error al compilar el proyecto:
Node <node reference> - Specify a valid .NET type name for this root node.
The current .NET type name of this root node is invalid (it is a reserved BizTalk Keyword or is an invalid C# identifier).
Resolución
Haga clic con el botón derecho en el nodo rood al que se hace referencia en el error y seleccione Propiedades.
Para la propiedad RootNode TypeName , quite los caracteres no válidos o las palabras reservadas, por ejemplo, punto (.).
El adaptador no puede generar metadatos de procedimiento almacenado fuertemente tipado con tablas temporales
Problema
El adaptador no puede generar metadatos para procedimientos almacenados fuertemente tipados que incluyen tablas temporales en su definición. El adaptador proporciona la siguiente excepción.
Microsoft.ServiceModel.Channels.Common.MetadataException:
Retrieval of Operation Metadata has failed while building WSDL at 'TypedProcedure/<schema>/<stored_procedure_name>' --->
System.Data.SqlClient.SqlException: Invalid object name '<temp_table_name>'.
Resolución
El adaptador de SQL no admite la generación de metadatos para procedimientos almacenados fuertemente tipados que contienen tablas temporales en su definición. En su lugar, debe generar metadatos para el mismo procedimiento desde el nodo Procedimientos mientras usa el complemento Agregar referencia de servicio de adaptador o Consumir complemento de servicio de adaptador.
Advertencia de enlace no válida al usar el adaptador en Visual Studio
Problema
Cuando use el adaptador para crear una aplicación en Visual Studio y abra el archivo de configuración (app.config) generado por el adaptador, verá una advertencia similar a la siguiente:
The element 'bindings' has invalid child element 'sqlBinding'. List of possible elements expected: 'basicHttpBinding, customBinding, ...
Causa
Esta advertencia aparece porque el enlace del adaptador de SQL, sqlBinding
, no es un enlace estándar enviado con Windows Communication Foundation (WCF).
Resolución
Puede omitir esta advertencia sin problemas.
BizTalk Server produce una excepción si usa más de un esquema de notificación en la misma aplicación o usa el esquema de notificación en varias aplicaciones del mismo host.
Problema
BizTalk Server produce una excepción XLANG o una excepción que indica que la aplicación no puede encontrar la especificación del documento porque varios esquemas coinciden con el tipo de mensaje.
Causa
Esto sucede debido a cualquiera de las siguientes acciones:
Ha generado más de un esquema de notificación en un proyecto de BizTalk Server, lo ha implementado en una aplicación de BizTalk Server y, a continuación, ha ejecutado la aplicación para recibir notificaciones de la base de datos de SQL Server. Dado que los esquemas de notificación son comunes, hay un conflicto entre los esquemas que se implementan en la aplicación BizTalk Server.
En el caso de varios proyectos, ha generado un esquema de notificación para cada uno de los proyectos de BizTalk Server, ha implementado cada proyecto en una aplicación BizTalk Server independiente en el mismo host y, a continuación, ha ejecutado una aplicación o aplicaciones para recibir notificaciones de la base de datos de SQL Server. Dado que los esquemas y ensamblados son accesibles en las aplicaciones de BizTalk Server, hay un conflicto entre los esquemas comunes implementados en varias aplicaciones y ensamblados de BizTalk Server.
Resolución
Use un único archivo de esquema de notificación para una aplicación de BizTalk Server. Si necesita usar el esquema de notificación en varias aplicaciones de BizTalk Server en el mismo host, cree una aplicación que contenga un único esquema de notificación y, a continuación, use el esquema de notificación de todas las demás aplicaciones de BizTalk Server.
El cliente del adaptador produce una excepción al realizar una operación después de restaurar la conectividad entre el cliente del adaptador y la base de datos de SQL Server
Problema
El cliente del adaptador produce la siguiente excepción al ejecutar una operación en la base de datos de SQL Server:
{System.Data.Common.DbException} = {"A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)"}
Causa
Durante la ejecución de una operación, el adaptador usa la conexión del grupo de conexiones de SQL ADO.NET para conectarse a la base de datos de SQL Server y realizar la operación. Si hay una breve interrupción de red entre el cliente del adaptador y la base de datos de SQL Server o si la base de datos de SQL Server está inactiva temporalmente, todas las conexiones del grupo de conexiones de SQL ADO.NET dejan de ser válidas. Una vez restaurada la conectividad e intenta realizar una operación en la base de datos de SQL Server, el adaptador usa las mismas conexiones no válidas del grupo de conexiones de SQL ADO.NET y, por lo tanto, el cliente del adaptador produce la excepción.
Resolución
El cliente del adaptador debe implementar la lógica de reintento en la ejecución de la operación donde deben detectar la excepción y especificar el recuento de reintentos de la operación como "n+1", donde "n" es el valor especificado para la propiedad de enlace MaxConnectionPoolSize. Esto implica que si hay un número "n" de conexiones en el grupo de conexiones que se han representado no válidos, teóricamente, el cliente del adaptador debe reintentar durante un máximo de "n+1" veces para obtener una conexión válida y, por lo tanto, realizar la operación.
Por ejemplo, para especificar el recuento de reintentos en BizTalk Server, abra el cuadro de diálogo Propiedades de un puerto de envío en una aplicación, haga clic en Opciones avanzadas de transporte en el panel izquierdo del cuadro de diálogo y, en el área Opciones de transporte, especifique un valor en la lista Recuento de reintentos.
El uso de memoria y el recuento de subprocesos aumenta al usar el adaptador en una operación de entrada de transacción
Problema
En una operación de entrada transaccionada, como sondear, si no hay datos disponibles en la tabla que se sondean y el adaptador continúa sondeando, durante un período de tiempo experimenta un aumento en el uso de memoria y el recuento de subprocesos.
Causa
Si no hay datos disponibles en la tabla que se están sondeando, después de cada ciclo de tiempo de espera de recepción, Windows Communication Foundation (WCF) genera un nuevo subproceso para continuar con la operación de sondeo. Por lo tanto, el número de subprocesos y el uso de memoria aumentan durante un período de tiempo. Sin embargo, si la tabla que se sondea tiene algunos datos, el mismo subproceso continúa realizando todos los sondeos posteriores.
Resolución
Se recomienda establecer ReceiveTimeout en el valor máximo posible, que es 24.20:31:23.6470000 (24 días) para que un nuevo subproceso se genere solo cada 24 días. Esto garantizará que el uso de memoria y el recuento de subprocesos no crezcan demasiado pronto.
Nota
Si se ha establecido SqlAdapterInboundTransactionBehavior, asegúrese de que TransactionTimeout también está configurado para el valor máximo posible, que es 24.20:31:23.64700000 (24 días). Al usar esta solución alternativa, podemos agregar SqlAdapterInboundTransactionBehavior solo si se debe configurar el nivel de aislamiento de transacción. De lo contrario, es un procedimiento recomendado quitar ese comportamiento.
Para obtener más información sobre la propiedad de enlace ReceiveTimeout, vea Leer sobre el adaptador de BizTalk para SQL Server propiedades de enlace del adaptador. Para obtener instrucciones sobre cómo especificar propiedades de enlace, consulte Configuración de las propiedades de enlace para el adaptador de SQL.
Nota
Al usar el adaptador con BizTalk Server, establecer el tiempo de espera en un valor grande no afecta a la funcionalidad del adaptador.