Код: Выделить всё
public TableStorageRepository(string storageAccountConnectionString, string tableName)
{
var options = new TableClientOptions
{
Retry =
{
MaxRetries = 5,
Delay = TimeSpan.FromSeconds(2),
MaxDelay = TimeSpan.FromSeconds(10),
Mode = RetryMode.Exponential
}
};
var serviceClient = new TableServiceClient(storageAccountConnectionString, options);
_tableClient = serviceClient.GetTableClient(tableName);
_tableClient.CreateIfNotExists();
}
< /code>
Вот логика, которая вызывает ее /настраивает di в программе .cs: < /p>
builder.Services.AddScoped(provider =>
{
var connectionString = builder.Configuration["AzureTableStorage:ConnectionString"]; //use appsettings.[Development].json
var tableName="Deployment";
return new TableStorageRepository(connectionString, tableName);
});
< /code>
Когда я пытаюсь запустить метод на моем контроллере, получает развертывание, логика репозитория является триггером, но он не работает, когда он пытается метод createifnotexists ().
ошибка: ошибка: < /p>
system.aggregateException: повторный рит после 4 попыток. Настройки повторения могут быть скорректированы в ClientOptions.retry или путем настройки пользовательской политики повторной попытки в ClientOptions.retrypolicy. (При отправке запроса произошла ошибка при отправке запроса.) (При отправке запроса произошла ошибка. произошел при отправке запроса.
system.net.http.httprequestexception: произошла ошибка при отправке запроса.
system.net.http.httpioexception: ответ был завершен преждевременно. (Ответ)
at system.net.http.httpconnection.sendasync (httprequestmessage, логический асинхро .HttpConnection.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net. Http.diagnosticshandler.sendasynccore (httprequestmessage, логический асинхро Osects, CancellationTokenSource wendingRequestScts, CancellationToken OriginalCancellationToken)
at azure.core.pipeline.httpclienttransport.processsyncorasync (httpmessage, Boolean async)
end Inner Exception Trace ---
at azure.core.pipeline.httpclienttranspors. Сообщение, логическое асинхро1 pipeline) at Azure.Core.Pipeline.ResponseBodyPolicy.ProcessAsync(HttpMessage message, ReadOnlyMemory< /code> 1 трубопровод, логический асинхро1 pipeline, Boolean async) at Azure.Core.Pipeline.RetryPolicy.ProcessAsync(HttpMessage message, ReadOnlyMemoryEnd of Inner Exception Stack Trace ---
Любые предложения будут оценены.
Я попытался изменить код, поэтому вместо строки подключения он передает отдельные параметры. Что -то подобное: < /p>
Код: Выделить всё
public TableStorageRepository(string accountName, string accountKey, string tableName, string endpointUri = null)
{
var serviceUri = endpointUri != null ? new Uri(endpointUri) : new Uri($"https://{accountName}.table.core.windows.net");
var credential = new TableSharedKeyCredential(accountName, accountKey);
_tableClient = new TableClient(serviceUri, tableName, credential);
// Ensure the table exists asynchronously
_tableClient.CreateIfNotExistsAsync().GetAwaiter().GetResult();
}
< /code>
Я получаю те же результаты - что имеет смысл, потому что я думаю, что само подключение производится правильно. По крайней мере, это моя интерпретация. Система хранения отвечает.
у меня есть следующий раздел в docker-compose.yml: < /p>
azureTableStorage:
image: mcr.microsoft.com/azure-storage/azurite:latest #Todo: replace with a real version once everyting is working
container_name: azureTableStorage
ports:
- "10000:10000" # Blob service
- "10001:10001" # Queue service
- "10002:10002" # Table service
command: "azurite-table --loose --location /data --debug /dev/stdout"
volumes:
- .azureTableStorage/data:/azureTableStorage/data
environment:
- AZURITE_ACCOUNTS=devstoreaccount1:Eby8vdM02xNOcqFevkbPZRvz1FclJ7t3YvsZ6Eby8vdM02xNOcqFevkbPZRvz1FclJ7t3YvsZ6 #sdk expects base64. But docker file just expects plain
< /code>
Контейнер не запускает проблем. Но ... я не могу запустить каких -либо команд завивки внутри контейнера (или за его пределами), чтобы увидеть данные таблицы.
Вот что я попробовал в контейнере:
/opt/azurite # curl -X GET \
> -H "Authorization: SharedKey devstoreaccount1:RWJ5OHZkTTAyeE5PY3FGZXZrYlBaUnZ6MUZjbEo3dDNZdnNaNkVieTh2ZE0wMnhOT2NxRmV2a2JQWlJ2ejFGY2xKN3QzWXZzWjY=" \
> -H "Accept: application/json;odata=fullmetadata" \
> -H "x-ms-version: 2019-02-02" \
> http://127.0.0.1:10002/devstoreaccount1/Tables
AuthorizationFailureRequestId:5376245b-4fd1-4db9-992f-6bb88c1c658c
Time:2025-02-10T19:22:24.822Z
/opt/azurite #
< /code>
Значение ключа, которое я отправляю, - это значение, которое я получаю от этой команды PowerShell:
Код: Выделить всё
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("Eby8vdM02xNOcqFevkbPZRvz1FclJ7t3YvsZ6Eby8vdM02xNOcqFevkbPZRvz1FclJ7t3YvsZ6")) Подробнее здесь: https://stackoverflow.com/questions/794 ... -container
Мобильная версия