我试图从控制台应用程序访问Azure存储,如下所示:
CloudStorageAccount storageAccount = CloudStorageAccount.FromConfigurationSetting("myConnectionString");
连接字符串的位置如下:
DefaultEndpointsProtocol = https和帐户名= XXX; AccountKey = XXX
但我得到一个例外:
捕获到System.Runtime.InteropServices.SEHException
Message =外部组件抛出异常.
来源= 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
的InnerException
在运行我的应用程序之前,是否需要启动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]); }