Exemple GetMessages
Cette rubrique fournit un exemple de code que vous pouvez utiliser pour récupérer des messages à partir d’une des tables de non-répudiation des messages ou de l’une des tables métier sous une forme lisible. Les tables de non-répudiation des messages incluent MessageStorageIn et MessageStorageOut dans la base de données BizTalk Accelerator pour RosettaNet (BTARN)Archive ; Les tables métier incluent MessageFromLOB et MessageToLOB dans la base de données BTARNDATA.
Utilisez GetMessages
pour la résolution des problèmes ou le développement. Par défaut, le code retourne une chaîne de base 64.
Notes
L’exemple de code GetMessages.cs contient deux sections de code : l’une pour récupérer des messages à partir d’une des tables métier et l’autre pour récupérer des messages à partir d’une des tables de non-répudiation. Créez des applications distinctes pour chaque objectif.
Pour récupérer des messages à partir d’une table métier
Ajoutez l’exemple de code suivant à votre programme :
private static string GetLOBMessage(string sMessageSource, string sMessageID)
Définissez le
sMessageSource
paramètre sur la table MessagesFromLOB ou MessagesToLOB.Définissez le
sMessageID
paramètre sur la valeur du champ MessageID dans la base de données.Notes
L’application retourne une chaîne qui contient le message récupéré.
Pour récupérer des messages d’une table de non-répudiation
Ajoutez l’exemple de code suivant à votre programme :
private static string GetNRMessage(string sMessageSource, string sMessageID)
Définissez le
sMessageSource
paramètre sur la table MessageStorageIn ou MessageStorageOut.Définissez le
sMessageID
paramètre sur la valeur du champ RecordID dans la base de données.Notes
L’application retourne une chaîne qui contient le message récupéré.
Illustre le
L’exemple GetMessages comprend les deux sections de code suivantes :
Une section vous montre comment récupérer un message binaire à partir d’une des tables de non-répudiation et le convertir en format ASCII lisible.
L’autre section vous montre comment récupérer un message à partir d’une des tables métier. Étant donné qu’un message dans une table métier est déjà au format ASCII, il s’agit d’une instruction SQL select.
Important
À des fins de démonstration, l’exemple de code fourni utilise une instruction SQL directe qui est sujette aux vulnérabilités d’injection de code SQL. Dans un environnement de production, il est recommandé d’utiliser des procédures stockées SQL paramétrables, au lieu de l’instruction SQL directe, pour éviter de telles vulnérabilités.
Exemple
Utilisez l’une des deux sections de l’exemple de code suivant pour récupérer des messages à partir d’une des tables de non-répudiation ou de l’une des tables métier.
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;
}
}
}