Condividi tramite


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

  1. Aggiungere il codice di esempio seguente al programma:

    private static string GetLOBMessage(string sMessageSource, string sMessageID)

  2. Impostare il sMessageSource parametro sulla tabella MessagesFromLOB o MessagesToLOB.

  3. 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

  1. Aggiungere il codice di esempio seguente al programma:

    private static string GetNRMessage(string sMessageSource, string sMessageID)

  2. Impostare il sMessageSource parametro sulla tabella MessageStorageIn o MessageStorageOut.

  3. 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;              
            }  
      }  
}  

Vedere anche

Esempi di messaggistica