我正在尝试从控制台应用程序访问 Azure 存储,如下所示:
CloudStorageAccount storageAccount = CloudStorageAccount.FromConfigurationSetting("myConnectionString");
其中连接字符串类似于:
DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX
但我得到一个异常(exception):
System.Runtime.InteropServices.SEHException 被捕获 消息=外部组件抛出异常。 来源=msshrtmi 错误代码=-2147467259
堆栈跟踪:
at RoleEnvironmentGetConfigurationSettingValueW(UInt16* , UInt16* , UInt64 , UInt64* )
at Microsoft.WindowsAzure.ServiceRuntime.Internal.InteropRoleManager.GetConfigurationSetting(String name, String& ret)
at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.GetConfigurationSettingValue(String configurationSettingName)
at AzureUpload.Program.<Init>b__2(String configName, Func`2 configSetter) in C:\Users\siddjain\Documents\Visual Studio 2010\Projects\ConsoleAplication1\Program.cs:line 51
at Microsoft.WindowsAzure.CloudStorageAccount.StorageAccountConfigurationSetting..ctor(String configurationSettingName)
at Microsoft.WindowsAzure.CloudStorageAccount.FromConfigurationSetting(String settingName)
at AzureUpload.Program.UploadBlob(String directory, String searchPattern, String container) in C:\Users\siddjain\Documents\Visual Studio 2010\Projects\ConsoleApplication1\Program.cs:line 87
内部异常
在运行我的应用程序之前,我需要启动 Azure 服务或其他服务吗?
最佳答案
正如 Steve 提到的,您正在尝试从 Azure 配置设置中检索设置,而控制台应用程序中不存在这些设置。
如果要编写代码以在非 Azure 或 Azure 环境中运行,则可以指定配置发布者。在 Azure 中,它只是一个包装器。否则,您基本上会重定向到 app.config/web.config。
有一个很棒的 CodeProject article这证明了这一点。这是该文章的代码片段。本质上,您可以在 OnStart 方法中指定配置发布者:
CloudStorageAccount.SetConfigurationSettingPublisher(
StorageAccountFactory.GetConfigurationSettingPublisher()
);
在这种情况下,您将有一个工厂方法,根据您是否在 Azure 中(RoleEnvironment.IsAvailable)来决定在何处存储/检索配置设置:
public static Action<string, Func<string,bool>> GetConfigurationSettingPublisher()
{
if (RoleEnvironment.IsAvailable)
return (configName, configSetter) =>
configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
return (configName, configSetter) =>
configSetter(ConfigurationManager.AppSettings[configName]);
}
关于c# - 谁能给我指出一个控制台应用程序访问 azure 存储的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3293429/