Может кто-нибудь указать мне пример, когда консольное приложение обращается к хранилищу Azure - PullRequest
3 голосов
/ 20 июля 2010

Я пытаюсь получить доступ к хранилищу Azure из консольного приложения, например:

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

, где строка подключения выглядит примерно так:

DefaultEndpointsProtocol = https; AccountName = XXX; AccountKey =XXX

но я получаю исключение:

System.Runtime.InteropServices.SEHException был пойман Сообщение = Внешний компонент выдал исключение.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

Нужно ли запускать службы Azure или что-то еще до запуска моего приложения?

Ответы [ 2 ]

4 голосов
/ 21 июля 2010

Как уже упоминал Стив, вы пытаетесь получить настройки из параметров конфигурации Azure, которых нет в консольном приложении.

Если вы хотите написать свой код для запуска в любом из не-AzureВ средах Azure вы можете указать издателя конфигурации.В Azure это просто оболочка.В противном случае, вы в основном перенаправляете на app.config / web.config.

Есть отличная статья CodeProject , которая демонстрирует это.Вот фрагмент кода из этой статьи.По сути, вы должны указать издателя конфигурации в своем методе 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]);
}
3 голосов
/ 21 июля 2010

FromConfigurationSetting использует API времени выполнения роли, который пытается прочитать параметры конфигурации. Это не будет работать при работе вне Windows Azure.

Вместо этого используйте CloudStorageAccount.Parse("<myConnectionString>"). (Или извлеките параметр конфигурации из app.config или где-то еще, а затем передайте его в Parse ()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...