ServiceBus выдает 401 несанкционированную ошибку

Я использую простую реализацию обмена сообщениями Windows Service Bus 1.0 Brokered для отслеживания взаимодействия пользователя с конкретным веб-приложением.

Каждый раз, когда что-то сохраняется в «конфиденциальной» таблице в базе данных, я настроил уровень репозитория, чтобы отправить сообщение следующим образом:

ServiceBus.MessageQueue<T>.PushAsync(entity);

который затем сериализует объект и создаст из него сообщение.

Мой класс MessageQueue примерно такой.

public static class MessageQueue<T>
{
    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;
        }

    }
}

Это работает безупречно, когда я отлаживаю это локально. Но когда я публикую сайт в IIS и запускаю, вызов namespaceManager.QueueExists(QueueName) завершается ошибкой с исключением, в котором говорится: «401 Неавторизованная ошибка».

Когда я меняю идентификатор пула приложений (в IIS) на учетную запись администратора, эта ошибка не возникает. Однако у меня нет абсолютно никакого способа сделать это, когда мы приступим к производству.

Я что-то упускаю? Если так, то, что это? Любая помощь приветствуется.


person Chameera Dedduwage    schedule 01.09.2013    source источник


Ответы (1)


Вы читали раздел безопасности в документации, Chameera? http://msdn.microsoft.com/en-us/library/windowsazure/jj193003(v=azure.10).aspx

Похоже, вы работаете с настройками безопасности по умолчанию, то есть у вас есть только авторизованные учетные записи администратора. Просмотрите раздел документации и предоставьте необходимые права учетным записям, которые вы хотите использовать в prod.

person Clemens Vasters    schedule 04.09.2013
comment
Спасибо, Клеменс, я, кажется, вообще пропустил это. Я чувствую, что это логическое исправление, поэтому я отмечу это как ответ, хотя мне еще предстоит его проверить. - person Chameera Dedduwage; 07.09.2013