我正在尝试使用Windows Azure开发多层云应用程序。为了存储我的数据,我选择了Azure存储表和Azure存储Blob。
我的应用程序的不同层使用相同的功能集,但方式不同。例如他们都必须能够访问blob。我决定创建单类库来访问Windows Azure Blob存储,但我遇到了400错误。
当我直接从我的工作者角色连接到Blob时,它工作正常,但是当我从类库调用类时,它失败了400状态代码(错误请求)。 这是我的代码:
public class TestClass
{
public static void Test()
{
string s = CloudConfigurationManager.GetSetting("StorageCS");
CloudStorageAccount account = CloudStorageAccount.Parse
(
s
);
CloudBlobClient client = account.CreateCloudBlobClient();
CloudBlobContainer container =
client.GetContainerReference("mycontainer");
container.CreateIfNotExists(BlobContainerPublicAccessType.Blob);
}
}
这是一个只试图访问blob容器的测试类。 当我在我的worker角色中使用这个类时,它工作正常。如果我从另一个辅助角色引用此辅助角色并在第二个角色中使用此类,则它可以工作,但如果我将此类移动到外部类库,则会失败。在'container.CreateIfNotExists(BlobContainerPublicAccessType.Blob);'行上抛出异常这是一个StorageException,带有'400。错误请求'消息。
我正在使用Azure存储模拟器。使用调试器,我检查了CloudStorageAccount.Parse方法是否存在相关连接字符串(“UseDevelopmentStorage = true”),无论如何(直接使用表单类库,来自其他工作者角色)类都使用。似乎无法使用类库访问Azure存储?
答案 0 :(得分:6)
请检查类库项目中的存储客户端库的版本。它很可能是版本3.0.0.0。如果是这种情况,请注意当前版本3.0.0.0的存储客户端库与存储模拟器(开发存储)不兼容。这是因为库使用最新版本的存储REST API,并且模拟器仅支持之前的版本。兼容性问题在存储团队博客中突出显示:http://blogs.msdn.com/b/windowsazurestorage/archive/2013/11/27/windows-azure-storage-release-introducing-cors-json-minute-metrics-and-more.aspx(请在帖子末尾阅读“存储模拟器指南”部分)
我的建议是将存储客户端库降级到以前的版本(2.1.0.4)。您可以通过Nuget Package Manager控制台安装此版本,并在其中键入以下命令:Install-Package WindowsAzure.Storage -Version 2.1.0.4
。