Prerequisites
Ensure an instance of the Azurite Storage Emulator is running.
Azure Storage Queues transport
This sample uses the Azure Storage Queues transport.
Code walk-through
This sample shows a simple two-endpoint scenario.
NativeSendersends aNativeMessagemessage toReceiverReceiverreceiving and printing out the contents of the received message.
Sending a native message
NativeSender creates and sends a queue message with a JSON serialized NativeMessage payload.
var nativeMessage = new NativeMessage
{
    NativeMessageId = Guid.NewGuid(),
    Content = $"Hello from native sender @ {DateTimeOffset.Now}"
};
var serializedMessage = JsonConvert.SerializeObject(nativeMessage);
await queueClient.SendMessageAsync(serializedMessage);
 Receiving a native message
To process a native message, the native QueueMessage has to be adapted to the NServiceBus MessageWrapper first. To accomplish this, a custom envelope unwrapper must be registered to provide the following:
- Message ID to associate with the incoming message
 - Serialized message payload as a byte array
 - Determine the native message type and assign it as an NServiceBus header
 
transport.MessageUnwrapper = message =>
    message.MessageText.Contains("NativeMessageId") &&
    message.MessageText.Contains("Content")
    ? new MessageWrapper
    {
        Id = message.MessageId,
        Body = message.Body.ToArray(),
        Headers = new Dictionary<string, string>
        {
            { Headers.EnclosedMessageTypes, typeof(NativeMessage).FullName }
        }
    }
    : null; // not a raw native message - allow the framework to deal with it
 Message type could be determined dynamically by reading the payload if different message types are sent natively.