我们使用 BizTalk Server 通过 MSMQ 发送消息。接收系统要求每条消息都将扩展属性设置为 guid(作为字节数组)。MSDN 在此处和(在 .NET 中)在此处记录 MSMQMessage 的 Extension 属性。
在 .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 消息的扩展名?如果可能的话,我宁愿不必创建自定义适配器,因为这需要大量开销和持续维护。