GetMessages サンプル
ここでは、メッセージ否認不可テーブルまたは基幹業務 (LOB) テーブルから、ユーザーが理解できる形式でメッセージを取得するためのサンプル コードについて説明します。 否認不可のメッセージ テーブルには、BizTalk Accelerator for RosettaNet (BTARN)アーカイブ データベースの MessageStorageIn と MessageStorageOut が含まれます。LOB テーブルには、BTARNDATA データベースの MessageFromLOB と MessageToLOB が含まれます。
トラブルシューティングまたは開発に使用 GetMessages
します。 既定では、コードは Base 64 文字列を返します。
Note
GetMessages.cs サンプル コードには、2 つのコード セクションが含まれています。1 つのセクションは LOB テーブルからメッセージを取得するためのもので、もう 1 つは否認不可テーブルからメッセージを取得するためのものです。 目的ごとに個別のアプリケーションを作成します。
LOB テーブルからメッセージを取得するには
次のサンプル コードをプログラムに追加します。
private static string GetLOBMessage(string sMessageSource, string sMessageID)
パラメーターを
sMessageSource
MessagesFromLOB テーブルまたは MessagesToLOB テーブルに設定します。パラメーターを
sMessageID
データベースの MessageID フィールドの値に設定します。Note
アプリケーションは、取得したメッセージを含む文字列を返します。
否認不可テーブルからメッセージを取得するには
次のサンプル コードをプログラムに追加します。
private static string GetNRMessage(string sMessageSource, string sMessageID)
パラメーターを
sMessageSource
MessageStorageIn テーブルまたは MessageStorageOut テーブルに設定します。パラメーターを
sMessageID
データベースの RecordID フィールドの値に設定します。Note
アプリケーションは、取得したメッセージを含む文字列を返します。
対象
GetMessages サンプルには、次の 2 つのコード セクションが含まれます。
1 つのセクションは、否認不可テーブルからバイナリ メッセージを取得して、ユーザーが理解できる ASCII 形式に変換する方法を示します。
もう 1 つのセクションは、LOB テーブルからメッセージを取得する方法を示します。 LOB テーブルのメッセージは既に ASCII 形式なので、これは SQL SELECT ステートメントです。
重要
説明の目的で、このサンプル コードは、SQL インジェクションの脆弱性の可能性がある直接 SQL ステートメントを使用します。 このような脆弱性を排除するために、運用環境では、直接 SQL ステートメントではなく、パラメーター化された SQL ストアド プロシージャを使用することをお勧めします。
例
否認不可テーブルまたは LOB テーブルのいずれかからメッセージを取得する場合は、次のコード例の 2 つのセクションのいずれかを使用します。
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;
}
}
}