Depurar errores en tiempo de ejecución de orquestaciones
Esta sección contiene una serie de preguntas y respuestas diseñadas para ayudarle a solucionar problemas en tiempo de ejecución con las orquestaciones.
¿Por qué aparecen errores de suscripción intermitentes cuando se envía a una orquestación secundaria que acaba de iniciar la primaria?
El error de suscripción que indica que no se ha encontrado la suscripción es resultado de una condición de anticipación. Una condición de anticipación se produce cuando el resultado de un proceso depende del orden determinado en el que tiene lugar el proceso. En este caso, la condición se produce cuando la orquestación secundaria no se ha iniciado a tiempo para recibir el mensaje que envió la primaria.
Para evitar este problema, la orquestación secundaria podría devolver un mensaje a la primaria cuando se haya iniciado y preparado para recibir un mensaje. De este modo, la orquestación primaria que se inició sabría que hay un receptor antes de enviar un mensaje.
¿Por qué aparecen errores cuando adjunto un puerto de envío dinámico a un puerto lógico?
No se ha diseñado un puerto dinámico para que herede todos los atributos y características del puerto asignado a él. Un puerto dinámico obtiene solo una dirección; no hereda el resto de la información asociada al puerto lógico.
Por ejemplo, si adjunta un puerto de envío dinámico a un puerto lógico con Notificación de entrega = Transmitido, el tiempo de ejecución no entregará una notificación de entrega. El tiempo de ejecución de XLANGs solo escuchará una notificación de entrega si el puerto se ha configurado realmente para ello de forma estática.
Nota
En XLANGs, los puertos se comportarán solo como se hayan configurado de forma estática.
¿Por qué aparece el error "No se encontró el nombre de archivo o de ensamblado o una de sus dependencias" cuando intento ejecutar la aplicación tras implementar una orquestación con componentes personalizados?
Normalmente, este error significa que el motor de orquestaciones de BizTalk no puede localizar el componente personalizado. Debe instalar todos los ensamblados que se incluyen en una aplicación de BizTalk dentro de la caché de ensamblados global del equipo que aloja la aplicación.
Se produce un error de tipo "La propiedad de contexto AssemblyName no era válida", cuando se envía un documento a un servicio Web mediante una orquestación
Problema
Al enviar un documento a un servicio Web mediante una orquestación, se produce un error "La propiedad de contexto AssemblyName no era válida".
Causa
La aplicación de BizTalk se diseñó, en un principio, mediante una aproximación de "mensajería" sin una orquestación que interviniera. Este tipo de solución usa un filtro de puerto de envío para vincular el puerto de recepción al puerto de envío; de este modo, el documento se transmite al puerto de envío cuando se recibe. Posteriormente, se modificó la solución para incluir una orquestación que se enlazó al puerto de envío.
Resolución
Quite el filtro del puerto de envío. Si aplica un filtro a un puerto de envío que esté enlazado a una orquestación, los mensajes evitarán, a menudo, la orquestación y provocarán el error de propiedad de contexto.
Se produce un error "WrongBodyPartException" cuando se controla un mensaje MIME de varias partes en una orquestación
Problema
La recepción de un mensaje MIME de varias partes en una orquestación da como resultado una excepción WrongBodyPartException .
Causa
Este error puede producirse si se especifica de forma incorrecta el orden de las partes o los mensajes no se ajustan a las posiciones de las partes que ha especificado. Por ejemplo, si especifica que la tercera partes es una parte del cuerpo pero los mensajes llegan con una parte del encabezado en la tercera posición.
Resolución
Compruebe que la configuración del índice de las partes del cuerpo es correcta y, a continuación, asegúrese de que todos los mensajes que llegan a través del adaptador son coherentes con la configuración. Puede inspeccionar el contenido de los mensajes MIME que dan error dentro de una orquestación si detiene la orquestación (pero la mantiene dada de alta); esto obligará a que se publique el mensaje de modo que pueda examinarlo mediante la consola de administración y comprobar el orden de las partes.
No se encuentran partes del mensaje MIME de varias partes
Problema
Los intentos de recuperar un elemento de mensaje MIME con un valor de índice superior a 0 BizTalk Server generan un error similar a "no se puede encontrar un mensaje de varias partes con el índice = <valor>".
Causa
Las razones más comunes para que se produzca este error son las siguientes:
El mensaje MIME tiene menos partes que las esperadas.
No se puede analizar por completo el mensaje MIME.
Resolución
Puede solucionar este problema asegurándose de que el código recupera solo partes de mensaje que se encuentran dentro del intervalo esperado del origen del mensaje. En caso de que se produzca un problema de análisis, debería comprobar que el mensaje MIME original está construido de forma adecuada y coherente en cuanto a la estructura. Si espera encontrarse con problemas de análisis ocasionales, asegúrese de que la orquestación tiene controladores de excepción adecuados.
Recibe el error "The FILE send adapter cannot open file for writing" al realizar un envío mediante un puerto de envío dinámico.
Problema
Recibirá un error "El adaptador de envío de archivos no puede abrir el nombre de archivo<> para escribir" en el registro de eventos de BizTalk Server al enviar mediante un puerto de envío dinámico.
Este problema se produce cuando el BTS. La propiedad OutBoundTransportLocation se define en una expresión de orquestación y se especifica el transporte de archivos, por ejemplo, las expresiones siguientes provocarán este error en tiempo de ejecución:
Message2=Message1;
Message2(BTS.OutboundTransportLocation) = "file:///c:/test/out";
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);
O bien
Message2=Message1;
Message2(BTS.OutboundTransportLocation) = "file://mymachine/test/out";
MySendPort(Microsoft.XLANGs.BaseTypes.Address)=Message2(BTS.OutboundTransportLocation);
Causa
Este problema se produce porque en tiempo de ejecución, el motor de orquestación quita el texto "file://" de la dirección URL especificada. Por lo tanto, si usa los ejemplos anteriores, "file:///c:/test/out" se evalúa como \c:\test\out y "file://mymachine/test/out" se evalúa como mymachine\test\out.
Resolución
Al especificar la dirección URL del BTS. Propiedad OutBoundTransportLocation en una expresión, agregue o quite caracteres "/" según sea necesario. Usando los ejemplos anteriores a BTS. La propiedad OutBoundTransportLocation debe definirse como "file://c:/test/out", que se evaluaría como c:\test\out o "file:////mymachine/test/out", que se evaluaría como \\mymachine\test\out.