Ejemplo n.º 1
0
 public string GetSharedAccessSignature(SharedAccessQueuePolicy policy)
 {
     return(_cloudQueue.GetSharedAccessSignature(policy));
 }
 internal static void SetupAccessPolicyPermission <T>(T policy, string permission)
 {
     //set permission as none if passed-in value is empty
     if (permission == null)
     {
         return;
     }
     if (string.IsNullOrEmpty(permission))
     {
         if (typeof(T) == typeof(SharedAccessTablePolicy))
         {
             ((SharedAccessTablePolicy)(Object)policy).Permissions = SharedAccessTablePermissions.None;
         }
         else if (typeof(T) == typeof(SharedAccessFilePolicy))
         {
             ((SharedAccessFilePolicy)(Object)policy).Permissions = SharedAccessFilePermissions.None;
         }
         else if (typeof(T) == typeof(SharedAccessBlobPolicy))
         {
             ((SharedAccessBlobPolicy)(Object)policy).Permissions = SharedAccessBlobPermissions.None;
         }
         else if ((typeof(T) == typeof(SharedAccessQueuePolicy)))
         {
             ((SharedAccessQueuePolicy)(Object)policy).Permissions = SharedAccessQueuePermissions.None;
         }
         else
         {
             throw new ArgumentException(Resources.InvalidAccessPolicyType);
         }
         return;
     }
     permission = permission.ToLower(CultureInfo.InvariantCulture);
     try
     {
         if (typeof(T) == typeof(SharedAccessTablePolicy))
         {
             //PowerShell will convert q to r in genreate table SAS. Add this to avoid regression
             string convertedPermission = permission.Replace('q', 'r');
             ((SharedAccessTablePolicy)(Object)policy).Permissions = SharedAccessTablePolicy.PermissionsFromString(convertedPermission);
         }
         else if (typeof(T) == typeof(SharedAccessFilePolicy))
         {
             ((SharedAccessFilePolicy)(Object)policy).Permissions = SharedAccessFilePolicy.PermissionsFromString(permission);
         }
         else if (typeof(T) == typeof(SharedAccessBlobPolicy))
         {
             ((SharedAccessBlobPolicy)(Object)policy).Permissions = SharedAccessBlobPolicy.PermissionsFromString(permission);
         }
         else if ((typeof(T) == typeof(SharedAccessQueuePolicy)))
         {
             ((SharedAccessQueuePolicy)(Object)policy).Permissions = SharedAccessQueuePolicy.PermissionsFromString(permission);
         }
         else
         {
             throw new ArgumentException(Resources.InvalidAccessPolicyType);
         }
     }
     catch (System.ArgumentOutOfRangeException)
     {
         throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.InvalidAccessPermission, permission));
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Initializes a new instance of the AzureQueueManager
        /// </summary>
        /// <param name="clusterName">the cluster name</param>
        /// <param name="clusterHash">the cluster id hash</param>
        /// <param name="sessionId">the session id</param>
        /// <param name="azureStorageConnectionString">the Azure storage connection string</param>
        public AzureQueueProxy(string clusterName, int clusterHash, string sessionId, string azureStorageConnectionString)
        {
            // this works for broker
            ThreadPool.SetMinThreads(MinThreadsOfThreadpool, MinThreadsOfThreadpool);

            // improve http performance for Azure storage queue traffic
            ServicePointManager.DefaultConnectionLimit = 1000;
            ServicePointManager.Expect100Continue      = false;
            ServicePointManager.UseNagleAlgorithm      = false;

            this.clusterName = clusterName;
            this.SessionId   = sessionId;
            this.clusterHash = clusterHash;

            this.azureStorageConnectionString = azureStorageConnectionString;

            // build the request and response queue
            // var requestStorageName = SoaHelper.GetRequestStorageName(clusterHash, SessionId);
            var requestBlobContainerName = SoaHelper.GetRequestStorageName(clusterHash, sessionId);
            var requestQueueNames        = Enumerable.Range(0, MessageRetrieveConcurrencyLevel).Select(i => SoaHelper.GetRequestStorageName(clusterHash, sessionId) + $"-{i}").ToArray();

            // this.responseStorageNamePrefix = SoaHelper.GetResponseStorageName(clusterId, SessionId);

            // exponential retry
            this.CreateStorageClient(DefaultRetryPolicy);

            this.requestQueues = requestQueueNames.Select(n => this.queueClient.GetQueueReference(n)).ToArray();
            foreach (var requestQueue in this.requestQueues)
            {
                CreateQueueWithRetry(requestQueue);
            }

            if (sessionId == SessionStartInfo.StandaloneSessionId)
            {
                // Clear the queue in standalone session
                foreach (var requestQueue in this.requestQueues)
                {
                    requestQueue.Clear();
                }
            }

            this.requestBlobContainer = this.blobClient.GetContainerReference(requestBlobContainerName);
            CreateContainerWithRetry(this.requestBlobContainer);

            // generate the SAS token for the queue and blob container
            SharedAccessQueuePolicy queuePolicy = new SharedAccessQueuePolicy()
            {
                Permissions = SharedAccessQueuePermissions.Add, SharedAccessExpiryTime = DateTime.UtcNow.AddDays(7)
            };

            this.requestQueueUris = this.requestQueues.Select(q => string.Join(string.Empty, q.Uri, q.GetSharedAccessSignature(queuePolicy))).ToArray();

            SharedAccessBlobPolicy blobPolicy = new SharedAccessBlobPolicy()
            {
                Permissions = SharedAccessBlobPermissions.Write, SharedAccessExpiryTime = DateTime.UtcNow.AddDays(7)
            };

            this.requestBlobUri = string.Join(string.Empty, this.requestBlobContainer.Uri, this.requestBlobContainer.GetSharedAccessSignature(blobPolicy));

            this.requestStorageClients = this.requestQueues.Select(q => new AzureStorageClient(q, this.requestBlobContainer)).ToArray();

            // this.responseStorageClient = new AzureStorageClient(this.responseQueue, this.responseBlobContainer);

            // initialize sender and retriever
            this.messageSender     = new MessageSender(this.responseMessageClients, SenderConcurrency);
            this.messageRetrievers = this.requestStorageClients.Select(c => new MessageRetriever(c.Queue, RetrieverConcurrency, DefaultVisibleTimeout, this.HandleMessages, null)).ToArray();

            this.receiveRequest = this.ReceiveRequest;
        }
 internal static string GetHash(SharedAccessQueuePolicy policy, string accessPolicyIdentifier, string resourceName, string sasVersion, SharedAccessProtocol?protocols, IPAddressOrRange ipAddressOrRange, byte[] keyValue)
 {
     throw new System.NotImplementedException();
 }
 internal static UriQueryBuilder GetSignature(SharedAccessQueuePolicy policy, string accessPolicyIdentifier, string signature, string accountKeyName, string sasVersion, SharedAccessProtocol?protocols, IPAddressOrRange ipAddressOrRange)
 {
     throw new System.NotImplementedException();
 }
Ejemplo n.º 6
0
 public static async Task <string> CreateCloudQueueAndGetSas(string connectionString, string queueName, SharedAccessQueuePolicy queuePolicy)
 {
     return(GetCloudQueueSas(await CreateCloudQueueIfNotExistsAsync(GetCloudQueueReference(connectionString, queueName)), queuePolicy));
 }
Ejemplo n.º 7
0
 public static string GetCloudQueueSas(CloudQueue queue, SharedAccessQueuePolicy queuePolicy)
 {
     return(queue.Uri + queue.GetSharedAccessSignature(queuePolicy));
 }
Ejemplo n.º 8
0
 public string GetSharedAccessSignature(SharedAccessQueuePolicy policy, string accessPolicyIdentifier, SharedAccessProtocol?protocols = null, IPAddressOrRange ipAddressOrRange = null)
 {
     return(_queue.GetSharedAccessSignature(policy, accessPolicyIdentifier, protocols, ipAddressOrRange));
 }