BizTalk Server を使用して、MSMQ 経由でメッセージを送信しています。受信側システムでは、各メッセージの拡張プロパティが GUID (バイト配列として) に設定されている必要があります。MSDN は、MSMQMessage の Extension プロパティをここに、(.NET では)ここに文書化しています。
.NET で拡張プロパティを設定するのは簡単です。
const string messageContent = "Message content goes here";
var encodedMessageContent = new UTF8Encoding().GetBytes(messageContent);
// Create the message and set its properties:
var message = new System.Messaging.Message();
message.BodyStream = new System.IO.MemoryStream(encodedMessageContent);
message.Label = "AwesomeMessageLabel";
// Here is the key part:
message.Extension = System.Guid.NewGuid().ToByteArray();
// Bonus! Send the message to the awesome transactional queue:
const string queueUri = @"FormatName:Direct=OS:localhost\Private$\awesomeness";
using (var transaction = new System.Messaging.MessageQueueTransaction())
{
transaction.Begin();
using (var queue = new System.Messaging.MessageQueue(queueUri))
{
queue.Send(message, transaction);
}
transaction.Commit();
}
ただし、BizTalk の MSMQ アダプターは、メッセージ拡張子を設定可能なものとして表示しません ( MSDN のアダプター プロパティのリストを参照してください)。また、BizTalk 2013 に同梱されている Microsoft.BizTalk.Adapter.MSMQ.MsmqAdapter アセンブリを逆コンパイルしましたが、拡張プロパティへの参照が見つかりません。
BizTalk によって送信される MSMQ メッセージの拡張子を設定するにはどうすればよいですか? 大量のオーバーヘッドと継続的なメンテナンスが必要になるため、可能であればカスタム アダプターを作成する必要はありません。