我以编程方式连接到blob商店:
string connectionString = CloudConfigurationManager.GetSetting("StorageConnectionString");
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
...
我的App.Config
设置为:
<configuration>
<appSettings>
<add key="StorageConnectionString"
value="DefaultEndpointsProtocol=http;AccountName=ACNAME;AccountKey=MYKEY==" />
</appSettings>
...
连接有效。但是我看到了消息&#34; Getting&#34; StorageConnectionString&#34;来自ServiceRuntime:FAIL &#34;在我当地的单位测试中:
此消息的原因是什么以及如何解决?
答案 0 :(得分:10)
我遇到了与Azure表存储相同的问题,但一切正常。
添加到您的web.config:
<connectionStrings>
<add name="ConnectionTableAzure" connectionString="DefaultEndpointsProtocol=https;AccountName=[ACCOUNTNAMEHERE];AccountKey=[ACCOUNTKEYHERE];TableEndpoint=[ENDPOINTHERE]"/>
</connectionStrings>
替换:
storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("ConnectionTableAzure"));
由此:
storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["ConnectionTableAzure"].ConnectionString);
答案 1 :(得分:2)
以前的解决方案有效,但我想进一步扩展它。
即使代码在生产环境中运行,它也会替换值,但有时您确实希望让Azure处理配置,同时在调试时保持对输出窗口的控制。
我创建了以下类来帮助解决这个问题。
public static class CloudConfigurationManagerExt
{
public static string GetSetting(string configurationValue)
{
#if DEBUG
return System.Configuration.ConfigurationManager.AppSettings[configurationValue];
#else
return Microsoft.Azure.CloudConfigurationManager.GetSetting(configurationValue);
#endif
}
}
然后我将所有对CouldConfigurationManager.GetSetting的调用更改为我的。
这
string connStr = CloudConfigurationManager.GetSetting("Microsoft.AzureBlobStorage.ConnectionString");
到
string connStr = CloudConfigurationManagerExt.GetSetting("Microsoft.AzureBlobStorage.ConnectionString");
并根据需要在web.config的appSetting部分或app.config中添加设置。
的web.config
<add key="Microsoft.AzureBlobStorage.ConnectionString" value="YourValueHere" />
如你所见。如果您在调试模式下运行,它将从appsetting获取值,否则遵循CloudConfigurationManager.GetSetting的常规路径
答案 2 :(得分:0)
CloudConfigurationManager.GetSetting
函数已重载,默认情况下,它将把其结果写入跟踪日志。
以下重载将阻止这些消息:
var connStr = CloudConfigurationManager.GetSetting("StorageConnectionString", false);
假设该值位于appSettings中,另一种选择是通过常规ConfigurationManager直接访问它。
var connStr = System.Configuration.ConfigurationManager.AppSettings["StorageConnectionString"];
旁注: 您可能要考虑使用默认实现创建一个IConfigFileProvider,该默认实现通过键名访问.config文件值。然后,您可以创建一个二级实现以在单元测试(或其他位置)中使用,该实现使用字典来存储值。根据您在做什么,您可能会使用其中一个。
在IConfigFileProvider中,您将定义一些函数,这些函数将使用默认值按名称自动返回设置,将类型转换为(例如,转换为int),如果找不到该值,则抛出异常。
我使用这种方法,并且效果很好。它允许您在不使用完全不同的项目的情况下测试不同的配置值设置,而同时又不强迫您对可能已经依赖于配置文件的类库进行更改。只要您始终从IConfigFileProvider检索.config设置,就可以了。