Пример #1
0
        /// <summary>
        /// Creates new Windows authorization rule for Service Bus. This works on Windows Azure Pack on prim only.
        /// </summary>
        /// <param name="namespaceName">The service bus namespace name</param>
        /// <param name="ruleName">The authorization rule name</param>
        /// <param name="username">The user principle name</param>
        /// <param name="permissions">Set of permissions given to the rule</param>
        /// <returns>The created Windows authorization rule</returns>
        public virtual AllowRule CreateWindowsAuthorization(
            string namespaceName,
            string ruleName,
            string username,
            params AccessRights[] permissions)
        {
            AllowRule rule = new AllowRule(
                string.Empty,
                "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn",
                username,
                permissions);

            using (HttpClient client = CreateServiceBusHttpClient())
            {
                rule = client.PostJson(UriElement.GetNamespaceAuthorizationRulesPath(namespaceName), rule, Logger);
            }

            return(rule);
        }
        static void Main()
        {
            const string queueName = "ServiceBusSecurityQueueSample";

            //Create a NamespaceManager instance (for management operations)
            // NOTE: Namespace-level security is handled via PowerShell configuration on the namespace itself
            var namespaceManager = NamespaceManager.Create();


            // Example of granting a domain user listen permissions to a queue
            var          queue        = new QueueDescription(queueName);
            const string issuer       = "ServiceBusDefaultNamespace";
            var          domainUser   = string.Format(@"{0}@{1}", "REPLACE WITH USERNAME", Environment.GetEnvironmentVariable("USERDNSDOMAIN"));
            var          accessRights = new List <AccessRights> {
                AccessRights.Listen
            };

            AuthorizationRule listenRule = new AllowRule(issuer, "nameidentifier", domainUser, accessRights);

            queue.Authorization.Add(listenRule);

            if (namespaceManager.QueueExists(queueName))
            {
                namespaceManager.DeleteQueue(queueName);
            }
            queue = namespaceManager.CreateQueue(queue);


            //List out the access rules for the queue
            ListAccessRules(queue);


            //Create a MessagingFactory instance (for sending and receiving messages)
            const string hostname    = "REPLACE WITH FULLY-QUALIFIED SERVER NAME";
            const string sbNamespace = "ServiceBusDefaultNamespace";
            var          stsUris     = new List <Uri> {
                new Uri(string.Format(@"sb://{0}:9355/", hostname))
            };
            var tokenProvider = TokenProvider.CreateWindowsTokenProvider(stsUris);

            var runtimeAddress = string.Format("sb://{0}:9354/{1}/", hostname, sbNamespace);
            //var messageFactory = MessagingFactory.Create(runtimeAddress,
            //    new MessagingFactorySettings() { TokenProvider = tokenProvider,
            //        OperationTimeout = TimeSpan.FromMinutes(30) });
            var messageFactory = MessagingFactory.Create(runtimeAddress, tokenProvider);



            //Create a queue client to send and receive messages to and from the queue
            var myQueueClient = messageFactory.CreateQueueClient(queueName);

            //Create a simple brokered message and send it to the queue
            var sendMessage = new BrokeredMessage("Hello World!");

            myQueueClient.Send(sendMessage);
            Console.WriteLine("Message sent: Body = {0}", sendMessage.GetBody <string>());

            //Receive the message from the queue
            var receivedMessage = myQueueClient.Receive(TimeSpan.FromSeconds(5));

            if (receivedMessage != null)
            {
                Console.WriteLine("Message received: Body = {0}", receivedMessage.GetBody <string>());
                receivedMessage.Complete();
            }

            //Close the connection to the Service Bus
            messageFactory.Close();

            Console.WriteLine("Press Enter to close.");
            Console.ReadLine();
        }