Compartir a través de


Ejemplo de GetMessages

En este tema se proporciona código de ejemplo que puede usar para recuperar mensajes de una de las tablas de no rechazo del mensaje o una de las tablas de línea de negocio (LOB) en un formulario legible. Las tablas de no rechazo de mensajes incluyen MessageStorageIn y MessageStorageOut en la base de datos de archivo del Acelerador de BizTalk para RosettaNet (BTARN); Las tablas LOB incluyen MessageFromLOB y MessageToLOB en la base de datos BTARNDATA.

Se usa GetMessages para la solución de problemas o el desarrollo. De forma predeterminada, el código devuelve una cadena base 64.

Nota

El código de ejemplo GetMessages.cs contiene dos secciones de código: una para recuperar mensajes de una de las tablas loB y otra para recuperar mensajes de una de las tablas de no rechazo. Cree aplicaciones independientes para cada propósito.

Para recuperar mensajes de una tabla LOB

  1. Agregue el código de ejemplo siguiente al programa:

    private static string GetLOBMessage(string sMessageSource, string sMessageID)

  2. Establezca el sMessageSource parámetro en la tabla MessagesFromLOB o MessagesToLOB.

  3. Establezca el sMessageID parámetro en el valor del campo MessageID de la base de datos.

    Nota

    La aplicación devuelve una cadena que contiene el mensaje recuperado.

Para recuperar mensajes de una tabla de no rechazo

  1. Agregue el código de ejemplo siguiente al programa:

    private static string GetNRMessage(string sMessageSource, string sMessageID)

  2. Establezca el sMessageSource parámetro en la tabla MessageStorageIn o MessageStorageOut.

  3. Establezca el sMessageID parámetro en el valor del campo RecordID de la base de datos.

    Nota

    La aplicación devuelve una cadena que contiene el mensaje recuperado.

Muestra

El ejemplo GetMessages incluye las dos secciones de código siguientes:

  • En una sección se muestra cómo recuperar un mensaje binario de una de las tablas de no rechazo y convertirlo en un formulario ASCII legible.

  • En la otra sección se muestra cómo recuperar un mensaje de una de las tablas lob. Dado que un mensaje de una tabla LOB ya está en forma ASCII, se trata de una instrucción select de SQL.

    Importante

    Con fines de demostración, el código de ejemplo proporcionado usa una instrucción SQL directa que es propensa a vulnerabilidades de inyección de CÓDIGO SQL. En un entorno de producción, se recomienda usar procedimientos almacenados de SQL parametrizados, en lugar de la instrucción SQL directa, para evitar estas vulnerabilidades.

Ejemplo

Use una de las dos secciones del ejemplo de código siguiente para recuperar mensajes de una de las tablas de no rechazo o una de las tablas loB.

using System;  
using System.Text;  
using System.Data.SqlClient;   
using Microsoft.Solutions.BTARN.Shared;  
  
namespace Microsoft.Solutions.BTARN.Admin  
{  
  
      /// <summary>  
      /// Summary description for GetMessages.  
      /// </summary>  
      class GetMessages  
      {  
            /// <summary>  
            /// The main entry point for the application.  
            /// </summary>  
            [STAThread]  
            static void Main(string[] args)  
            {  
                  Console.WriteLine(GetLOBMessage("MessagesFromLOB", "bce5b580daf543a990a4f37331f31e42"));  
                  Console.WriteLine(GetLOBMessage("MessagesToLOB", "bce5b580daf543a990a4f37331f31e42"));  
                  Console.WriteLine(GetNRMessage("MessageStorageIn", "dc06e9cfecd746a889dd6ea7beb3ba21"));  
                  Console.WriteLine(GetNRMessage("MessageStorageOut", "dc06e9cfecd746a889dd6ea7beb3ba21"));  
            }  
  
            /// <summary>  
            /// Retrieve a message from the LOB tables in the BTARNDATA database  
            /// </summary>  
            /// <param name="sMessageSource">Can be either MessagesFromLOB or MessagesToLOB</param>  
            /// <param name="sMessageID">The value of the MessageID field in the database</param>  
            /// <returns>Returns a string that contains the retrieved message</returns>        
            private static string GetLOBMessage(string sMessageSource, string sMessageID)  
            {  
                  SqlDataReader localReader = null;  
                  SqlConnection sqlConnection = null;  
                  SqlCommand sqlCommand = null;  
                  string sReturnedMessage="";              
                  string sQuery;  
  
                  sqlConnection = new SqlConnection(RuntimeGlobal.DataDbConnectionString);  
                  sQuery = "SELECT ServiceContent from " + sMessageSource + " WHERE MessageID=N'" + sMessageID +"'";  
  
                  sqlCommand = new SqlCommand(sQuery, sqlConnection);  
                  sqlConnection.Open();  
  
                  localReader = sqlCommand.ExecuteReader();  
  
                  if (localReader.Read())  
                        sReturnedMessage=localReader.GetString(0);  
  
                  localReader.Close();  
                  sqlConnection.Close();        
                  return sReturnedMessage;              
            }  
  
            /// <summary>  
            /// Retrieve a message from the non-repudiation tables in the BTARNArchive database  
            /// </summary>  
            /// <param name="sMessageSource">Can be either MessageStorageIn or MessageStorageOut</param>  
            /// <param name="sMessageID">The value of the RecordID field in the database</param>  
            /// <returns>Returns a string that contains the retrieved message</returns>  
            private static string GetNRMessage(string sMessageSource, string sMessageID)  
            {  
                  SqlDataReader localReader = null;  
                  SqlConnection sqlConnection = null;  
                  SqlCommand sqlCommand = null;  
                  string sReturnedMessage="";              
                  string sQuery;  
  
                  sqlConnection = new SqlConnection(RuntimeGlobal.ArchiveDbConnectionString);  
                  sQuery = "SELECT Content from " + sMessageSource + " WHERE RecordID=N'" + sMessageID +"'";  
  
                  sqlCommand = new SqlCommand(sQuery, sqlConnection);  
                  sqlConnection.Open();  
  
                  localReader = sqlCommand.ExecuteReader();  
  
                  if (localReader.Read())  
                  {  
                        //Determine the size of the field in bytes and create a new byte array  
                        byte[] bData= new byte[localReader.GetBytes(0, 0, null, 0, 0)];  
  
                        //Read the value of the field into bData  
                        localReader.GetBytes(0, 0, bData, 0, bData.Length);  
  
                        //Convert the byte array into a string  
                        sReturnedMessage=Encoding.ASCII.GetString(bData);  
                  }  
  
                  localReader.Close();  
                  sqlConnection.Close();        
                  return sReturnedMessage;              
            }  
      }  
}  

Consulte también

Ejemplos de mensajería