我正在把我的脚趾浸入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(收到)”方法时,我得到了这个:
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.开发人员商店服务正在运行;我可以看到消息进入队列,我只是无法删除它们。
有人见过这样的事吗?
答案 0 :(得分:3)
我弄明白发生了什么。有问题的代码在xUnit测试工具中运行。事实证明,xUnit运行器默认情况下不会设置带有配置文件路径的appdomain。 System.UriBuilder现在命中配置文件,因此它会爆炸。
解决方法是将一个空的app.config添加到测试项目中。现在它有效。
哎呀!