我正在将脚趾头浸入Windows Azure中,而且我遇到了一些非常简单的事情,但是我看不到它。
我有这个小testing来玩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.开发者存储服务正在运行; 我可以看到消息进入队列,我不能删除它们。
任何人见过这样的事情?
我想清楚发生了什么事。 有问题的代码在xUnit测试工具中运行。 事实证明,默认情况下,xUnit runner不会设置带有配置文件路径的appdomain。 System.UriBuilder现在碰到配置文件,所以它爆炸了。
解决方法是将一个空的app.config添加到测试项目。 现在起作用了。
哎呀!