/// <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); }