Skip to content

Commit

Permalink
mimic brokered message "cloning" when body type is a byte array (ASB …
Browse files Browse the repository at this point in the history
…limitation)
  • Loading branch information
SeanFeldman committed Nov 11, 2016
1 parent cf065cf commit 6b68d62
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 2 deletions.
3 changes: 2 additions & 1 deletion Forms/MessageForm.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 12 additions & 1 deletion Forms/MessageForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,18 @@ private void btnSubmit_Click(object sender, EventArgs e)
}
else
{
outboundMessage = serviceBusHelper.CreateMessageForApiReceiver(brokeredMessage.Clone(txtMessageText.Text),
BrokeredMessage message;
// For body type ByteArray cloning is not an option. When cloned, supplied body can be only of a string or stream types, but not byte array :(
if (bodyType == BodyType.ByteArray)
{
message = brokeredMessage.CloneWithByteArrayBodyType(txtMessageText.Text);
}
else
{
message = brokeredMessage.Clone(txtMessageText.Text);
}

outboundMessage = serviceBusHelper.CreateMessageForApiReceiver(message,
0,
false,
false,
Expand Down
26 changes: 26 additions & 0 deletions Helpers/BrokeredMessageExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using Microsoft.ServiceBus.Messaging;
#endregion

Expand Down Expand Up @@ -73,6 +74,31 @@ public static BrokeredMessage Clone(this BrokeredMessage message, string text)
return clone;
}

public static BrokeredMessage CloneWithByteArrayBodyType(this BrokeredMessage originalMessage, string text)
{
var bytes = Encoding.UTF8.GetBytes(text);
var message = new BrokeredMessage(bytes);

// Copy all custom properties
foreach (var header in originalMessage.Properties)
{
// Recovery header should not be included
if (header.Key != "NServiceBus.Transport.Recovery")
{
message.Properties[header.Key] = header.Value;
}
}

// Required standard properties
message.CorrelationId = originalMessage.CorrelationId;
message.ReplyTo = originalMessage.ReplyTo;
message.TimeToLive = originalMessage.TimeToLive;
message.ScheduledEnqueueTimeUtc = originalMessage.ScheduledEnqueueTimeUtc;
message.ViaPartitionKey = originalMessage.ViaPartitionKey;

return message;
}

public static Stream GetBodyStream(this BrokeredMessage message)
{
return bodyStreamPropertyInfo.GetValue(message) as Stream;
Expand Down

0 comments on commit 6b68d62

Please sign in to comment.