Исключение при удалении сообщения из очереди Azure?

Я погружаюсь в Windows Azure и сталкиваюсь с чем-то, что должно быть простым, но я просто не вижу этого.

У меня есть этот небольшой тест, чтобы поиграть с очередями Azure:

public void CanPublishSillyLittleMessageOnQueue()
{
    var queueClient = CloudStorageAccount.DevelopmentStorageAccount.CreateCloudQueueClient();
    var testQueue = queueClient.GetQueueReference("testqueue1");

    testQueue.CreateIfNotExist();
    var message = new CloudQueueMessage("This is a test");
    testQueue.AddMessage(message);

    CloudQueueMessage received;

    int sleepCount = 0;
    while((received = testQueue.GetMessage()) == null)
    {
        ++sleepCount;
        Thread.Sleep(25);
    }
    testQueue.DeleteMessage(received);

    Assert.Equal(message.AsString, received.AsString);
}

Он отправляет сообщение просто отлично - я вижу его в таблице SQL. Однако, когда он попадает в метод "testQueue.DeleteMessage(received)", я получаю следующее:

TestCase 'AzureExploratory.PlayingWithQueues.CanPublishSillyLittleMessageOnQueue'
failed: System.ArgumentNullException : Value cannot be null.
Parameter name: str
    at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()
    at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait()
    at Microsoft.WindowsAzure.StorageClient.TaskImplHelper.ExecuteImplWithRetry(Func`1 impl, RetryPolicy policy)
    at Microsoft.WindowsAzure.StorageClient.CloudQueue.DeleteMessage(CloudQueueMessage message)
    PlayingWithQueues.cs(75,0): at AzureExploratory.PlayingWithQueues.CanPublishSillyLittleMessageOnQueue()

что, по-видимому, является сбоем где-то внутри пакета Azure SDK.

Я использую VS 2010, .NET 4.0, Azure SDK V1.2, 64-разрядную версию Win 7. Работает служба хранилища разработчиков; Я вижу, что сообщения попадают в очередь, я просто не могу их удалить.

Кто-нибудь когда-нибудь видел что-нибудь подобное?


person Chris Tavares    schedule 09.09.2010    source источник


Ответы (1)


Я понял, что происходит. Рассматриваемый код выполнялся в тестовой системе xUnit. Оказывается, бегун xUnit по умолчанию не устанавливает домен приложения с путем к файлу конфигурации. System.UriBuilder теперь обращается к файлу конфигурации, поэтому он взрывается.

Обходной путь состоял в том, чтобы добавить в тестовый проект пустой файл app.config. Теперь это работает.

АРХ!

person Chris Tavares    schedule 09.09.2010
comment
Вчера команда xUnit исправила это — xunit.codeplex.com/Thread/View. aspx?ThreadId=226567 - person Chris Tavares; 12.09.2010