Тайм-аут запроса клиента .NET Blob Storage .NET - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь понять поведение обработки сетевых ошибок в клиенте Azure Storage .NET.Короче говоря, моя проблема:

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

Например, это происходит, если я использую следующий код (я не настроил никаких параметров на самом клиенте BLOB-объектов).

...

var blockBlob = container.GetBlockBlobReference("myblob.data");

var blobRequestOptions = new BlobRequestOptions()
    {
        RetryPolicy = new NoRetry(),
    };

using (var stream = new MemoryStream())
{
    blockBlob.DownloadToStream(stream, null, blobRequestOptions);
}

Я знаю, что могу настроитьсвойство MaximumExecutionTime в BlobRequestOptions, но мне кажется немного странным, что поведение по умолчанию заключается в том, чтобы зависать на неопределенный срок в случае падения сетевого подключения.Это заставляет меня подозревать, что я упускаю что-то базовое в том, как должен использоваться клиент.(Там значение по умолчанию для MaximumExecutionTimeout кажется бесконечным.)

Я также знаю, что могу передать ServerTimeout, но я понимаю, что это используется внутри службы хранилища Azure и не будет применимо, если естьОтключение сети.

Мне кажется, что я ищу именно тайм-аут для каждого запроса на HTTP-вызовы в хранилище больших двоичных объектов.Что-то вроде Timeout для HttpWebRequest.

(я воспроизвел мою проблему в клиенте хранилища Azure версии 9.3.2)

1 Ответ

0 голосов
/ 17 октября 2018

Из моего понимания SDK тайм-аут обрабатывается по умолчанию на стороне сервера.Я ничего не нашел по этому поводу в MSDN, но SDK Java Azure (с использованием тех же конечных точек HTTP) говорит:

Максимальное выполнение по умолчанию установлено в клиенте и по умолчанию равно нулю, указываянет максимального времени.

Вы можете проверить это здесь: https://azure.github.io/azure-storage-java/index.html?com/microsoft/azure/storage/RequestOptions.html

Ищите метод setMaximumExecutionTimeInMs.

Поскольку кажется, что тайм-ауты обрабатываются сервероми у клиента по умолчанию нет значения тайм-аута по умолчанию, имеет смысл, что ваш запрос никогда не заканчивается, когда вы отключаете маршрутизатор, потому что вы не сможете отловить серверный тайм-аут.

...