Tutorial :Can anyone point me to an example where a console application accesses azure storage



Question:

I am trying to access Azure Storage from a console app like this:

CloudStorageAccount storageAccount = CloudStorageAccount.FromConfigurationSetting("myConnectionString");    

where the connection string is something like:

DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX

but i get an exception:

System.Runtime.InteropServices.SEHException was caught Message=External component has thrown an exception. Source=msshrtmi ErrorCode=-2147467259

StackTrace:

   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

Do I need to start up azure services or something before running my app?


Solution:1

As Steve mentioned, you're trying to retrieve settings from the Azure configuration settings, which don't exist in a console app.

If you want to write your code to run in either non-Azure or Azure environments, you can specify a configuration publisher. When in Azure, it's simply a wrapper. Otherwise, you basically redirect to app.config / web.config.

There's a great CodeProject article that demonstrates this. Here's a code snippet from that article. In essence, you'd specify the configuration publisher in your OnStart method:

CloudStorageAccount.SetConfigurationSettingPublisher(      StorageAccountFactory.GetConfigurationSettingPublisher()  );  

In this case, you'd have a factory method deciding where to store/retrieve config settings, based on whether you're in 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]);  }  


Solution:2

FromConfigurationSetting uses the role runtime API, which tries to read configuration settings. That will not work when running outside Windows Azure.

Use CloudStorageAccount.Parse("<myConnectionString>") instead. (Or fetch the config setting from app.config or somewhere else and then pass it into Parse()).


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »