/// <summary>
        /// Saves reference to message envelope as array of bytes.
        /// </summary>
        /// <param name="reference">The reference to to message envelope.</param>
        /// <returns>byte array that could be used to rebuild reference</returns>

        public static byte[] SaveEnvelopeReference(EnvelopeReference reference)
        {
            // important to use \r\n
            var builder = new StringBuilder();
            builder
                .Append("[cqrs-ref-r1]\r\n")
                .Append(reference.StorageContainer).Append("\r\n")
                .Append(reference.StorageReference);

            return Encoding.Unicode.GetBytes(builder.ToString());
        }
 public static bool TryReadAsEnvelopeReference(byte[] buffer, out EnvelopeReference reference)
 {
     if (BytesStart(buffer, Reference))
     {
         var text = Encoding.Unicode.GetString(buffer);
         var args = text.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
         reference = new EnvelopeReference(args[1], args[2]);
         return true;
     }
     reference = null;
     return false;
 }
 CloudQueueMessage PrepareCloudMessage(byte[] buffer)
 {
     if (buffer.Length < AzureMessageOverflows.CloudQueueLimit)
     {
         // write message to queue
         return new CloudQueueMessage(buffer);
     }
     // ok, we didn't fit, so create reference message
     var referenceId = DateTimeOffset.UtcNow.ToString(DateFormatInBlobName) + "-" + Guid.NewGuid().ToString().ToLowerInvariant();
     _cloudBlob.GetBlobReference(referenceId).UploadByteArray(buffer);
     var reference = new EnvelopeReference(_cloudBlob.Uri.ToString(), referenceId);
     var blob = AzureMessageOverflows.SaveEnvelopeReference(reference);
     return new CloudQueueMessage(blob);
 }