代码之家  ›  专栏  ›  技术社区  ›  Chris Tavares

从Azure队列中删除消息时出现异常?

  •  1
  • Chris Tavares  · 技术社区  · 14 年前

    我把脚趾伸进了WindowsAzure,我碰到了一些必须简单的东西,但我就是看不见。

    我有一个小测试来处理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()
    

    这似乎是一个失败在某个地方向下的内部的AzureSDK。

    我使用的是vs 2010,.net 4.0,Azure SDK v1.2,64位Win7。开发人员商店服务正在运行;我可以看到消息进入队列,我只是不能删除它们。

    有人见过这样的东西吗?

    1 回复  |  直到 13 年前
        1
  •  3
  •   Chris Tavares    14 年前

    我知道发生了什么事。有问题的代码在XUnit测试线束中运行。结果显示,默认情况下,XUnit运行程序没有使用配置文件路径设置AppDomain。system.uribuilder现在点击配置文件,所以它会爆炸。

    解决方法是向测试项目添加一个空的app.config。现在它起作用了。

    啊!