ServiceBus genera 401 errori non autorizzati

Sto utilizzando una semplice implementazione della messaggistica intermediata di Service Bus 1.0 di Windows per tenere traccia delle interazioni dell’utente con una particolare applicazione web.

Ogni volta che qualcosa viene salvato in una tabella “sensibile” nel database, ho impostato il livello di repository per inviare un messaggio in questo modo:

ServiceBus.MessageQueue.PushAsync(entity); 

che quindi serializzerà l’ quadro e creerà un messaggio al di fuori di essa.

La mia class MessageQueue è qualcosa di simile.

 public static class MessageQueue { static string ServerFQDN; static int HttpPort = 9355; static int TcpPort = 9354; static string ServiceNamespace = "ServiceBusDefaultNamespace"; public static void PushAsync(T msg) { ServerFQDN = System.Net.Dns.GetHostEntry(string.Empty).HostName; //Service Bus connection string var connBuilder = new ServiceBusConnectionStringBuilder { ManagementPort = HttpPort, RuntimePort = TcpPort }; connBuilder.Endpoints.Add(new UriBuilder() { Scheme = "sb", Host = ServerFQDN, Path = ServiceNamespace }.Uri); connBuilder.StsEndpoints.Add(new UriBuilder() { Scheme = "https", Host = ServerFQDN, Port = HttpPort, Path = ServiceNamespace}.Uri); //Create a NamespaceManager instance (for management operations) and a MessagingFactory instance (for sending and receiving messages) MessagingFactory messageFactory = MessagingFactory.CreateFromConnectionString(connBuilder.ToString()); NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(connBuilder.ToString()); if (namespaceManager == null) { Console.WriteLine("\nUnexpected Error"); return; } //create a new queue string QueueName = "ServiceBusQueueSample"; if (!namespaceManager.QueueExists(QueueName)) { namespaceManager.CreateQueue(QueueName); } try { QueueClient myQueueClient = messageFactory.CreateQueueClient(QueueName); string aaa = JsonConvert.SerializeObject(msg, Formatting.Indented, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ContractResolver = new NHibernateContractResolver() }); BrokeredMessage sendMessage1 = new BrokeredMessage(aaa); sendMessage1.Properties.Add("UserName",Thread.CurrentPrincipal.Identity.Name); sendMessage1.Properties.Add("TimeStamp", ApplicationDateTime.Now); sendMessage1.Properties.Add("Type", msg.GetType().Name); myQueueClient.Send(sendMessage1); } catch (Exception e) { var l = new Logger(); l.Log(LogEventEnum.WebrequestFailure, e.Message); Console.WriteLine("Unexpected exception {0}", e.ToString()); throw; } } } 

Funziona perfettamente quando eseguo il debug in locale. Ma quando pubblico il sito in IIS ed eseguo, la chiamata namespaceManager.QueueExists(QueueName) fallisce con un’eccezione che dice “401 Errore non autorizzato”.

Quando cambio l’id quadro del pool di applicazioni (in IIS) su un account amministratore, questo errore non si verifica. Tuttavia, non c’è assolutamente modo che io possa farlo accadere quando andiamo in produzione.

Mi sto perdendo qualcosa? Se è così, che cosa è? Qualsiasi aiuto è molto apprezzato.

Hai letto la sezione di sicurezza nei documenti, Chameera? http://msdn.microsoft.com/en-us/library/windowsazure/jj193003(v=azure.10).aspx

Sembra che tu stia correndo con le impostazioni di sicurezza predefinite, il che significa che hai solo account amministratore autorizzati. Esaminare la sezione della documentazione e concedere i diritti necessari agli account che si desidera utilizzare in prod.