static async Task ReceiveSessionMessagesAsync() { Console.WriteLine("==================================================================="); Console.WriteLine("Accepting sessions in the reverse order of sends for demo purposes"); Console.WriteLine("==================================================================="); var configuration = new AzureStorageAttachmentConfiguration(StorageConnectionString, containerName: "ovp"); sessionClient.RegisterAzureStorageAttachmentPlugin(configuration); // AcceptMessageSessionAsync(i.ToString()) as below with session id as parameter will try to get a session with that sessionId. // AcceptMessageSessionAsync() without any messages will try to get any available session with messages associated with that session. IMessageSession session = await sessionClient.AcceptMessageSessionAsync(); if (session != null) { Message message = await session.ReceiveAsync(); var stream = new MemoryStream(message.Body); StreamReader reader = new StreamReader(stream); string text = reader.ReadToEnd(); Console.WriteLine($"message body : {text}"); await session.CompleteAsync(message.SystemProperties.LockToken); } }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log) { //log.LogInformation("C# HTTP trigger function processed a request."); string requestContent = await new StreamReader(req.Body).ReadToEndAsync(); log.LogInformation($"Received payload from client. Sending to Service Bus as Attachment."); // Getting connection information var serviceBusConnectionString = Environment.GetEnvironmentVariable("SERVICE_BUS_CONNECTION_STRING"); var queueName = Environment.GetEnvironmentVariable("QUEUE_NAME"); var storageConnectionString = Environment.GetEnvironmentVariable("STORAGE_CONNECTION_STRING"); // Creating config for sending message var config = new AzureStorageAttachmentConfiguration(storageConnectionString); // Creating and registering the sender using Service Bus Connection String and Queue Name var sender = new MessageSender(serviceBusConnectionString, queueName); sender.RegisterAzureStorageAttachmentPlugin(config); // Create payload var payload = new { data = requestContent }; var serialized = JsonConvert.SerializeObject(payload); var payloadAsBytes = Encoding.UTF8.GetBytes(serialized); var message = new Message(payloadAsBytes); // Send the message await sender.SendAsync(message); return(new OkObjectResult($"Message is sent!")); }
public async Task Should_set_valid_until_datetime_on_blob_same_as_message_TTL() { var payload = "payload"; var bytes = Encoding.UTF8.GetBytes(payload); var message = new Message(bytes) { MessageId = Guid.NewGuid().ToString(), TimeToLive = TimeSpan.FromHours(1) }; var dateTimeNowUtc = new DateTime(2017, 1, 2); var configuration = new AzureStorageAttachmentConfiguration(connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments", messagePropertyToIdentifyAttachmentBlob: "attachment-id"); AzureStorageAttachment.DateTimeFunc = () => dateTimeNowUtc; var plugin = new AzureStorageAttachment(configuration); await plugin.BeforeMessageSend(message); var account = CloudStorageAccount.Parse(await configuration.ConnectionStringProvider.GetConnectionString()); var client = account.CreateCloudBlobClient(); var container = client.GetContainerReference(configuration.ContainerName); var blobName = (string)message.UserProperties[configuration.MessagePropertyToIdentifyAttachmentBlob]; var blob = container.GetBlockBlobReference(blobName); await blob.FetchAttributesAsync(); var validUntil = blob.Metadata[AzureStorageAttachment.ValidUntilUtc]; Assert.Equal(dateTimeNowUtc.Add(message.TimeToLive).ToString(AzureStorageAttachment.DateFormat), validUntil); }
static async Task Main(string[] args) { var connectionString = Environment.GetEnvironmentVariable("AzureServiceBus_ConnectionString"); var managementClient = new ManagementClient(connectionString); if (!await managementClient.QueueExistsAsync("attachments")) { await managementClient.CreateQueueAsync("attachments"); } var queueClient = new QueueClient(connectionString, "attachments", ReceiveMode.ReceiveAndDelete); var configuration = new AzureStorageAttachmentConfiguration(new KeyVaultProvider("https://keyvaultplugin.vault.azure.net/secrets/storage-connection-string")); queueClient.RegisterAzureStorageAttachmentPlugin(configuration); await queueClient.SendAsync(new Message(Encoding.UTF8.GetBytes("hello"))); var messageReceiver = new MessageReceiver(connectionString, "attachments", ReceiveMode.ReceiveAndDelete); messageReceiver.RegisterAzureStorageAttachmentPlugin(configuration); var message = await messageReceiver.ReceiveAsync(TimeSpan.FromSeconds(3)); Console.WriteLine($"Received message with body: {Encoding.UTF8.GetString(message.Body)}"); Console.ReadLine(); }
void Configuring_connection_string_provider(string connectionString) { #region Configuring_connection_string_provider var provider = new PlainTextConnectionStringProvider(connectionString); var config = new AzureStorageAttachmentConfiguration(provider); #endregion }
async Task Upload_attachment_without_registering_plugin(Message message, AzureStorageAttachmentConfiguration config) { #region Upload_attachment_without_registering_plugin //To make it possible to use SAS URI when downloading, use WithBlobSasUri() when creating configuration object await message.UploadAzureStorageAttachment(config); #endregion }
void Configuring_plugin_using_StorageCredentials(string connectionString, string blobEndpoint) { #region Configuring_plugin_using_StorageCredentials var credentials = new StorageCredentials(/*Shared key OR Service SAS OR Container SAS*/); var config = new AzureStorageAttachmentConfiguration(credentials, blobEndpoint); #endregion }
void ConfigurationAndRegistration(string connectionString, string queueName, string storageConnectionString) { #region ConfigurationAndRegistration var sender = new MessageSender(connectionString, queueName); var config = new AzureStorageAttachmentConfiguration(storageConnectionString); sender.RegisterAzureStorageAttachmentPlugin(config); #endregion }
public void Should_get_back_AzureStorageAttachment_for_connection_string_based_configuration() { IClientEntity client = new FakeClientEntity("fake", string.Empty, RetryPolicy.Default); var azureStorageAttachmentConfiguration = new AzureStorageAttachmentConfiguration(ConnectionString); var registeredPlugin = AzureStorageAttachmentExtensions.RegisterAzureStorageAttachmentPlugin(client, azureStorageAttachmentConfiguration); Assert.Equal(registeredPlugin, client.RegisteredPlugins.First()); Assert.IsAssignableFrom <AzureStorageAttachment>(registeredPlugin); }
public void Should_get_back_AzureStorageAttachment_for_container_sas_based_configuration() { IClientEntity client = new FakeClientEntity("fake", string.Empty, RetryPolicy.Default); var azureStorageAttachmentConfiguration = new AzureStorageAttachmentConfiguration(new StorageCredentials("?sv=2018-03-28&sr=c&sig=5XxlRKoP4yEmibM2HhJlQuV7MG3rYgQXD89mLpNp%2F24%3D"), "http://127.0.0.1:10000/devstoreaccount1"); var registeredPlugin = AzureStorageAttachmentExtensions.RegisterAzureStorageAttachmentPlugin(client, azureStorageAttachmentConfiguration); Assert.Equal(registeredPlugin, client.RegisteredPlugins.First()); Assert.IsAssignableFrom <AzureStorageAttachment>(registeredPlugin); }
public async Task Should_apply_defaults_for_missing_arguments() { var configuration = new AzureStorageAttachmentConfiguration(new PlainTextConnectionStringProvider(ConnectionString)) .WithBlobSasUri(); Assert.Equal(ConnectionString, await configuration.ConnectionStringProvider !.GetConnectionString()); Assert.NotEmpty(configuration.ContainerName); Assert.NotEmpty(configuration.MessagePropertyToIdentifyAttachmentBlob); Assert.Equal(AzureStorageAttachmentConfigurationExtensions.DefaultSasTokenValidationTime.Days, configuration.BlobSasTokenValidationTime !.Value.Days); Assert.Equal(AzureStorageAttachmentConfigurationConstants.DefaultMessagePropertyToIdentitySasUri, configuration.MessagePropertyForBlobSasUri); Assert.True(configuration.MessageMaxSizeReachedCriteria(new Message())); }
void Configure_body_override(string connectionString, string queueName, string storageConnectionString) { #region Configure_body_override var sender = new MessageSender(connectionString, queueName); var config = new AzureStorageAttachmentConfiguration(storageConnectionString) .OverrideBody(message => Array.Empty <byte>()); sender.RegisterAzureStorageAttachmentPlugin(config); #endregion }
async Task AttachmentReceiving(string connectionString, string entityPath, AzureStorageAttachmentConfiguration config) { #region AttachmentReceiving var receiver = new MessageReceiver(connectionString, entityPath, ReceiveMode.ReceiveAndDelete); receiver.RegisterAzureStorageAttachmentPlugin(config); var message = await receiver.ReceiveAsync().ConfigureAwait(false); // message will contain the original payload #endregion }
public void Should_get_back_disposable_object_for_full_plugin() { var client = new FakeClientEntity("fake", string.Empty, RetryPolicy.Default); var configuration = new AzureStorageAttachmentConfiguration( connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments", messagePropertyToIdentifyAttachmentBlob: "attachment-id"); var registeredPlugin = AzureStorageAttachmentExtensions.RegisterAzureStorageAttachmentPlugin(client, configuration); Assert.Equal(registeredPlugin, client.RegisteredPlugins.First()); Assert.IsAssignableFrom <ServiceBusPlugin>(registeredPlugin); Assert.IsAssignableFrom <IDisposable>(registeredPlugin); }
void ConfigurationAndRegistrationSas(string connectionString, string queueName, string storageConnectionString) { #region ConfigurationAndRegistrationSas var sender = new MessageSender(connectionString, queueName); var config = new AzureStorageAttachmentConfiguration(storageConnectionString) .WithBlobSasUri( sasTokenValidationTime: TimeSpan.FromHours(4), messagePropertyToIdentifySasUri: "mySasUriProperty"); sender.RegisterAzureStorageAttachmentPlugin(config); #endregion }
public void Should_throw_if_plugin_was_disposed() { var client = new FakeClientEntity("fake", string.Empty, RetryPolicy.Default); var configuration = new AzureStorageAttachmentConfiguration( connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments", messagePropertyToIdentifyAttachmentBlob: "attachment-id"); var registeredPlugin = AzureStorageAttachmentExtensions.RegisterAzureStorageAttachmentPlugin(client, configuration); ((IDisposable)registeredPlugin).Dispose(); Assert.ThrowsAsync <ObjectDisposedException>(() => registeredPlugin.BeforeMessageSend(null)); Assert.ThrowsAsync <ObjectDisposedException>(() => registeredPlugin.AfterMessageReceive(null)); }
async Task Download_attachment_without_registering_plugin(Message message, AzureStorageAttachmentConfiguration config) { #region Download_attachment_without_registering_plugin //Using SAS URI with default message property ($attachment.sas.uri) await message.DownloadAzureStorageAttachment(); //Using SAS URI with custom message property await message.DownloadAzureStorageAttachment("$custom-attachment.sas.uri"); //Using configuration object await message.DownloadAzureStorageAttachment(config); #endregion }
public void Configure() { // Getting connection information from app.config string storageConnectionString = ConfigurationManager.AppSettings?["STORAGE_CONNECTION_STRING"]; string serviceBusConnectionString = ConfigurationManager.AppSettings?["SERVICE_BUS_CONNECTION_STRING"]; string queueName = ConfigurationManager.AppSettings?["QUEUE_NAME"]; // Creating config for receiving message var config = new AzureStorageAttachmentConfiguration(storageConnectionString); // Creating and registering the receiver using Service Bus Connection String and Queue Name // This can also be done using SAS tokens - Refer to plugin usage here - https://github.com/SeanFeldman/ServiceBus.AttachmentPlugin _receiver = new MessageReceiver(serviceBusConnectionString, queueName, ReceiveMode.ReceiveAndDelete); _receiver.RegisterAzureStorageAttachmentPlugin(config); }
void Configure_blob_name_override(string connectionString, string queueName, string storageConnectionString) { #region Configure_blob_name_override var sender = new MessageSender(connectionString, queueName); var config = new AzureStorageAttachmentConfiguration(storageConnectionString) .OverrideBlobName(message => { var tenantId = message.UserProperties["tenantId"].ToString(); var blobName = $"{tenantId}/{message.MessageId}"; return(blobName); }); sender.RegisterAzureStorageAttachmentPlugin(config); #endregion }
private static async Task ReceiveMessagesAsync() { Console.WriteLine("==================================================================="); Console.WriteLine("Accepting message in the reverse order of sends for demo purposes"); Console.WriteLine("==================================================================="); var configuration = new AzureStorageAttachmentConfiguration(StorageConnectionString); messageReceiver.RegisterAzureStorageAttachmentPlugin(configuration); var message = await messageReceiver.ReceiveAsync().ConfigureAwait(false); var stream = new MemoryStream(message.Body); StreamReader reader = new StreamReader(stream); string text = reader.ReadToEnd(); }
public async Task Should_send_and_receive_with_configuration() { var payload = "payload"; var bytes = Encoding.UTF8.GetBytes(payload); var message = new Message(bytes); var configuration = new AzureStorageAttachmentConfiguration( connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments", messagePropertyToIdentifyAttachmentBlob: "attachment-id"); await message.UploadAzureStorageAttachment(configuration); Assert.Null(message.Body); var receivedMessage = await message.DownloadAzureStorageAttachment(configuration); Assert.Equal(payload, Encoding.UTF8.GetString(receivedMessage.Body)); }
public async Task Should_receive_it_using_connection_string() { var payload = "payload"; var bytes = Encoding.UTF8.GetBytes(payload); var message = new Message(bytes); var configuration = new AzureStorageAttachmentConfiguration( connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments", messagePropertyToIdentifyAttachmentBlob: "attachment-id"); var plugin = new AzureStorageAttachment(configuration); await plugin.BeforeMessageSend(message); Assert.Null(message.Body); var receivedMessage = await plugin.AfterMessageReceive(message); Assert.Equal(payload, Encoding.UTF8.GetString(receivedMessage.Body)); }
public async Task Should_receive_it_using_container_sas() { var payload = "payload"; var bytes = Encoding.UTF8.GetBytes(payload); var message = new Message(bytes); var credentials = new StorageCredentials(await fixture.GetContainerSas("attachments")); var configuration = new AzureStorageAttachmentConfiguration(credentials, fixture.GetBlobEndpoint(), messagePropertyToIdentifyAttachmentBlob: "attachment-id"); var plugin = new AzureStorageAttachment(configuration); await plugin.BeforeMessageSend(message); Assert.Null(message.Body); var receivedMessage = await plugin.AfterMessageReceive(message); Assert.Equal(payload, Encoding.UTF8.GetString(receivedMessage.Body)); }
public async Task Should_not_reupload_blob_if_one_is_already_assigned() { var payload = "payload"; var bytes = Encoding.UTF8.GetBytes(payload); var message = new Message(bytes); var credentials = new StorageCredentials(await fixture.GetContainerSas("attachments")); var configuration = new AzureStorageAttachmentConfiguration(credentials, fixture.GetBlobEndpoint(), messagePropertyToIdentifyAttachmentBlob: "attachment-id"); var plugin = new AzureStorageAttachment(configuration); var processedMessage = await plugin.BeforeMessageSend(message); var blobId = processedMessage.UserProperties["attachment-id"]; var reprocessedMessage = await plugin.BeforeMessageSend(message); Assert.Equal(blobId, reprocessedMessage.UserProperties["attachment-id"]); }
public async Task Should_not_reupload_blob_if_one_is_already_assigned() { var payload = "payload"; var bytes = Encoding.UTF8.GetBytes(payload); var message = new Message(bytes); var configuration = new AzureStorageAttachmentConfiguration( connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments", messagePropertyToIdentifyAttachmentBlob: "attachment-id"); var plugin = new AzureStorageAttachment(configuration); var processedMessage = await plugin.BeforeMessageSend(message); var blobId = processedMessage.UserProperties["attachment-id"]; var reprocessedMessage = await plugin.BeforeMessageSend(message); Assert.Equal(blobId, reprocessedMessage.UserProperties["attachment-id"]); }
public async Task Should_not_throw_if_plugin_was_not_disposed() { var client = new FakeClientEntity("fake", string.Empty, RetryPolicy.Default); var configuration = new AzureStorageAttachmentConfiguration( connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments", messagePropertyToIdentifyAttachmentBlob: "attachment-id"); var registeredPlugin = AzureStorageAttachmentExtensions.RegisterAzureStorageAttachmentPlugin(client, configuration); var client2 = new FakeClientEntity("fake2", string.Empty, RetryPolicy.Default); client2.RegisterPlugin(registeredPlugin); var message = new Message(new byte[] {}); await registeredPlugin.BeforeMessageSend(message); await registeredPlugin.AfterMessageReceive(message); }
public async Task Should_be_able_to_send_if_container_was_not_found() { await fixture.DeleteContainer("attachments-that-didnt-exist"); var payload = "payload"; var bytes = Encoding.UTF8.GetBytes(payload); var message = new Message(bytes); var configuration = new AzureStorageAttachmentConfiguration( connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider, containerName: "attachments-that-didnt-exist", messagePropertyToIdentifyAttachmentBlob: "attachment-id"); var plugin = new AzureStorageAttachment(configuration); await plugin.BeforeMessageSend(message); Assert.Null(message.Body); var receivedMessage = await plugin.AfterMessageReceive(message); Assert.Equal(payload, Encoding.UTF8.GetString(receivedMessage.Body)); }
public async Task Should_be_able_to_override_blob_name_and_receive_message_payload_using_the_new_name() { var payload = "payload"; var bytes = Encoding.UTF8.GetBytes(payload); var message = new Message(bytes) { MessageId = Guid.NewGuid().ToString("N") }; var configuration = new AzureStorageAttachmentConfiguration( connectionStringProvider: AzureStorageEmulatorFixture.ConnectionStringProvider); configuration.OverrideBlobName(msg => $"test/{msg.MessageId}"); await message.UploadAzureStorageAttachment(configuration); Assert.Null(message.Body); var receivedMessage = await message.DownloadAzureStorageAttachment(configuration); Assert.Equal(payload, Encoding.UTF8.GetString(receivedMessage.Body)); Assert.Equal($"test/{message.MessageId}", message.UserProperties[configuration.MessagePropertyToIdentifyAttachmentBlob]); }