Запуск Azure Storage Emulator программно - PullRequest
0 голосов
/ 19 декабря 2018

Я использую хранилище BLOB-объектов Azure для хранения фотографий.Работает нормально.Чтобы подключиться к хранилищу, я добавил AzureStorageConfig в свой appsettings.json:

"AzureStorageConfig": {
    "AccountName": "<accountname>",
    "ImageContainer": "<containername>",
    "AccountKey": "<accountkey>"
}

. Я дополнительно создал класс AzureStorageConfig

 public class AzureStorageConfig
    {
        public string AccountKey { get; set; }
        public string AccountName { get; set; }
        public string BaseUrl { get; set; }
        public Uri BlobEndpoint { get; set; }
        public string ImageContainer { get; set; }
        public Uri QueueEndpoint { get; set; }
        public Uri TableEndpoint { get; set; }
    }

и настроил его в файле Startup.cs:

services.Configure<AzureStorageConfig>(Configuration.GetSection(nameof(AzureStorageConfig)));

Таким образом, конфигурацию можно внедрить через внедрение зависимостей.

Для appsettings.development.json я хотел бы использовать эмулятор хранилища Azure.Я нашел несколько учебных пособий, но все они используют строку подключения для подключения к эмулятору, а не конфигурацию.

Я пытался использовать данные, найденные на страницах Microsoft:

     "AzureStorageConfig": {
    "AccountName": "devstoreaccount1",
    "ImageContainer": "images",
    "AccountKey": "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
    "BlobEndpoint": "http://127.0.0.1:10000/devstoreaccount1",
    "TableEndpoint": "http://127.0.0.1:10002/devstoreaccount1",
    "QueueEndpoint": "http://127.0.0.1:10001/devstoreaccount1"
}

IИнициализируйте объекты следующим образом:

public class AzureStorageService
    {
        private readonly CloudBlobContainer _imageContainer;
        private readonly AzureStorageConfig _storageConfig; 

public AzureStorageService(IOptions<AzureStorageConfig> config)
            {  
                _storageConfig = config.Value;
                CloudStorageAccount storageAccount;
                StorageCredentials storageCredentials = new StorageCredentials(_storageConfig.AccountName, _storageConfig.AccountKey);

                if (_storageConfig.BlobEndpoint == null)
                {
                    storageAccount = new CloudStorageAccount(storageCredentials, true);
                }
                else
                {
                    storageAccount = new CloudStorageAccount(
                        storageCredentials,
                        _storageConfig.BlobEndpoint,
                        _storageConfig.QueueEndpoint,
                        _storageConfig.TableEndpoint,
                        null);
                }

                CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
                _imageContainer = blobClient.GetContainerReference(_storageConfig.ImageContainer);
                _imageContainer.CreateIfNotExistsAsync().Wait();
            }
}

Мне пришлось запустить эмулятор вручную, запустив приложение "Microsoft Azure Compute Emulator".Как запустить (и инициализировать) эмулятор программно для автоматических тестов (а также для CI Azure Devops, который выполняет эти тесты)?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Вы должны изменить свой код, чтобы использовать строку подключения, которая аналогична использованию имени учетной записи и ключа, но будет проще, если вы используете эмулятор, просто изменив строку подключения на "UseDevelopmentStorage=true;".

Что касается запуска эмулятора, вы можете проверить переменную среды хостинга в файле startup.cs для среды:

   public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider, ILoggerFactory loggerFactory)
        {
            if (env.IsDevelopment())
            {
                //Start the Emulator here by initiating a new process that calls the emulator.exe file
            }
}

Другим решением будет использование размещенной службы и такая же проверка для среды и запуска.эмулятор в StartAsync и остановите его в StopAsync

См. эту ссылку для получения дополнительной информации Фоновые задачи с размещенными службами в ASP.NET Core

0 голосов
/ 24 декабря 2018

Похоже, что код, предоставленный вами для доступа к файлу appsetting.json в ядре asp.net, не является проблемой.Вы можете сослаться на эту статью .

И если вы загружаете свой большой двоичный объект, если у вас всегда возникает проблема, это означает, что машина существует, но у нее нет служб, прослушивающих указанный порт , или брандмауэр останавливает вас.

Если это происходит случайно - вы использовали слово «иногда» - и повторная попытка успешна, скорее всего, потому что серверимеет полное «отставание».

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