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
Agregue el código de ejemplo siguiente al programa:
private static string GetLOBMessage(string sMessageSource, string sMessageID)
Establezca el
sMessageSource
parámetro en la tabla MessagesFromLOB o MessagesToLOB.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
Agregue el código de ejemplo siguiente al programa:
private static string GetNRMessage(string sMessageSource, string sMessageID)
Establezca el
sMessageSource
parámetro en la tabla MessageStorageIn o MessageStorageOut.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;
}
}
}