Esempio di GetMessages
Questo argomento fornisce codice di esempio che è possibile usare per recuperare i messaggi da una delle tabelle di non ripudio del messaggio o da una delle tabelle line-of-business (LOB) in un modulo leggibile. Le tabelle di non ripudio del messaggio includono MessageStorageIn e MessageStorageOut nel database di archiviazione BizTalk per RosettaNet (BTARN); le tabelle LOB includono MessageFromLOB e MessageToLOB nel database BTARNDATA.
Usare GetMessages
per la risoluzione dei problemi o lo sviluppo. Per impostazione predefinita, il codice restituisce una stringa di base 64.
Nota
Il codice di esempio GetMessages.cs contiene due sezioni di codice, uno per il recupero di messaggi da una delle tabelle LOB e uno per il recupero di messaggi da una delle tabelle non ripudio. Creare applicazioni separate per ogni scopo.
Per recuperare i messaggi da una tabella LOB
Aggiungere il codice di esempio seguente al programma:
private static string GetLOBMessage(string sMessageSource, string sMessageID)
Impostare il
sMessageSource
parametro sulla tabella MessagesFromLOB o MessagesToLOB.Impostare il
sMessageID
parametro sul valore del campo MessageID nel database.Nota
L'applicazione restituisce una stringa contenente il messaggio recuperato.
Per recuperare i messaggi da una tabella non ripudio
Aggiungere il codice di esempio seguente al programma:
private static string GetNRMessage(string sMessageSource, string sMessageID)
Impostare il
sMessageSource
parametro sulla tabella MessageStorageIn o MessageStorageOut.Impostare il
sMessageID
parametro sul valore del campo RecordID nel database.Nota
L'applicazione restituisce una stringa contenente il messaggio recuperato.
Dimostra
L'esempio GetMessages include le due sezioni di codice seguenti:
Una sezione illustra come recuperare un messaggio binario da una delle tabelle non ripudio e convertirla in formato ASCII leggibile.
L'altra sezione illustra come recuperare un messaggio da una delle tabelle LOB. Poiché un messaggio in una tabella LOB è già in formato ASCII, si tratta di un'istruzione di selezione SQL.
Importante
A scopo dimostrativo, il codice di esempio fornito usa un'istruzione SQL diretta soggetta a vulnerabilità di inserimento SQL. In un ambiente di produzione è consigliabile usare stored procedure SQL con parametri, anziché l'istruzione SQL diretta, per evitare tali vulnerabilità.
Esempio
Usare una delle due sezioni nell'esempio di codice seguente per recuperare i messaggi da una delle tabelle non ripudio o da una delle tabelle 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;
}
}
}