2010-03-29 14 views
6

Me preguntaba si alguien sabe dónde puedo ver los datos de un mensaje suspendido en la base de datos de biztalk.Mensajes suspendidos de Biztalk en la base de datos

Lo necesito porque se han suspendido unos 900 mensajes debido a una validación y tengo que editarlos todos, no es posible reanudarlos.

Sé que la información de mensajes suspendidos se muestra en BizTalkMsgBoxDb en la tabla InstancesSuspended y que las diferentes partes de cada mensaje se muestran en la tabla MessageParts. Sin embargo, no puedo encontrar la tabla donde se almacenan los datos reales.

¿Alguien tiene alguna idea de dónde se puede hacer esto?

Respuesta

1

I encontré una manera de hacer esto, no hay ningún problema con mi sistema cuando solo quiero leerlos.

Cómo lo hice utilizando el método "CompressionStreams" utilizando Microsoft.Biztalk.Pipeline.dll.

El método para hacer esto:

public static Stream getMsgStrm(Stream stream) 
    { 
     Assembly pipelineAssembly = Assembly.LoadFrom(string.Concat(@"<path to dll>", @"\Microsoft.BizTalk.Pipeline.dll")); 
     Type compressionStreamsType = pipelineAssembly.GetType("Microsoft.BizTalk.Message.Interop.CompressionStreams", true); 
     return (Stream)compressionStreamsType.InvokeMember("Decompress", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, null, new object[] { (object)stream }); 
    } 

Entonces me conecto con mi base de datos, rellenar un conjunto de datos y transmitir los datos a la cadena, código:

 String SelectCmdString = "select * from dbo.Parts"; 
     SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(SelectCmdString, "<your connectionstring">); 
     DataSet myDataSet = new DataSet(); 
     mySqlDataAdapter.Fill(myDataSet, "BodyParts"); 

     foreach (DataRow row in myDataSet.Tables["BodyParts"].Rows) 
     { 
      if (row["imgPart"].GetType() != typeof(DBNull)) 
      { 
       SqlBinary binData = new SqlBinary((byte[])row["imgPart"]); 
       MemoryStream stm = new MemoryStream(binData.Value); 
       Stream aStream = getMsgStrm(stm); 
       StreamReader aReader = new StreamReader(aStream); 

       string aMessage = aReader.ReadToEnd(); 

       //filter msg 
       //write msg 
      } 
     } 

continuación escribo cada cuerda a un "txt" o "xml" apropiado, dependiendo de lo que desee, también puede filtrar ciertos mensajes con expresión regular, etc.

Espero que esto ayude a cualquiera, de seguro me ayudó.

Saludos

0

Es muy probable que esto no sea compatible con Microsoft. No se arriesgue a atornillar su sistema. Si necesita una edición y volver a enviarla, debe estar integrada en la orquestación. De lo contrario, lo mejor es utilizar WMI para escribir un script para:

  1. sacar todos los mensajes suspendidos
  2. ellos terminan
  3. editar los
  4. volver a enviarlos
+0

Entonces ¿por qué la puntuación negativa? Me gustaría escuchar lo que estás pensando. –

+0

Creo que cuando respondió que su primera línea estaba dirigida a usted "no hay ningún problema con mi sistema cuando solo quiero leerlos" ... – Nix

+0

+1 para @ChrisLoris. El consejo de usar WMI y terminar los mensajes suspendidos es correcto. La otra parte del consejo es quizás más formal puesto que "Microsoft no admite el acceso directo a la base de datos BizTalk. Las versiones futuras de BizTalk pueden cambiar el esquema, etc." Con esto en mente, considere que la solución dada puede necesitar ser modificada si se instala una nueva versión de producción o incluso un parche. –

0

se puede encontrar a través de la herramienta HAT sólo tiene que especificar el esquema, el puerto y la fecha exacta con la hora exacta y que le muestre los mensajes de la derecha haga clic en el deseado y guardar .

1

extraer mensajes de instancias suspendidas

Escenario:

BizTalk 2010 y SQL 2008 R2 es el ambiente que hemos utilizado plano este escenario.

Tiene problemas con algunas integraciones, 1500 instancias suspendidas dentro de BizTalk y necesita enviar los mensajes reales a un cliente, y luego no desea guardarlos manualmente desde Administrador de BizTalk.

Hay muchos blogs y recursos de Internet señalando vbs, scripts de powershell, pero he usado BizTalk Terminator para resolver este tipo de escenarios.

Como ahora BizTalk Terminator es lo preguntas 3 preguntas cuando se inicia la herramienta

bases de datos

I.1.All BizTalk están respaldados? II.2.Todas las instancias de host se detienen? III.3.Todos los agentes SQL de BizTalk están detenidos? Esto está bien cuando realmente va a cambiar algo dentro de las bases de datos de BizTalk, pero esto no es lo que va a hacer en este escenario, solo está usando la herramienta para leer desde las bases de datos de BizTalk. Pero siempre debe tener copias de seguridad de las bases de datos de BizTalk.

Usted siempre es responsable de lo que hace, pero cuando hemos utilizado estas herramientas en la forma que describo no tenemos ningún problema con este escenario.

Luego de iniciar la herramienta Terminator, haga clic en Sí para las 3 preguntas (no necesita detener nada en este escenario) y luego en el entorno correcto. Primero haga esto en su entorno de prueba para que se sienta cómodo con este escenario , el siguiente paso es elegir una tarea de finalizador elegir Conteo de instancias (y guardar mensajes) después de esto, debe completar el parámetro TAB con serviceClass y Hostname correctos y establecer SaveMessages en True y establecer Last FilesFullPath en la carpeta correcta que desea guardar los mensajes a.

A continuación, puede optar por hacer clic en el botón Ejecutar y dependiendo del tamaño y el tiempo que puede tomar, después de este desconectar Terminator NO haga nada más.

Debería ahora si ha rellenado los valores correctos en el parámetro TAB tiene los mensajes guardados dentro de la carpeta FilesaveFullPath.

Descargar BizTalk terminador desde esta dirección:

http://www.microsoft.com/en-us/download/details.aspx?id=2846

Cuestiones relacionadas