Ошибка большого двоичного объекта службы хранилища Azure - AnonymousClientOtherError и AnonymousNetworkError

У меня есть мобильное приложение, и я помещаю изображения в BLOB-объект хранилища Azure. при тестировании несколькими нашими людьми (на тестовом и бета-тестировании) все хорошо. Но когда мы выпустили его в бета-версию и получили возможность использовать сотни (может быть, более тысячи) пользователей, многие из них сообщили, что не могут видеть изображения. Это происходит на их iPhone, а также на телефонах Android разных производителей. Иногда для одного и того же изображения на одном телефоне это хорошо, а на другом не отображается.

Когда я проверяю журнал blob, я обнаружил много ошибок, в основном эти две:

  1. AnonymousClientOtherError; 304

«Анонимный запрос, который завершился неудачно, как ожидалось, чаще всего запрос, который не прошел заданное предварительное условие. Общее количество анонимных запросов, которые не прошли проверку предварительного условия (например, If-Modified и т. Д.) Для запросов GET. Примеры: Условные запросы GET, которые не прошли проверку. " (От Microsoft)

  1. AnonymousNetworkError; 200

«Наиболее частой причиной этой ошибки является отключение клиента до истечения тайм-аута в службе хранения. Вы должны изучить код в своем клиенте, чтобы понять, почему и когда клиент отключается от службы хранения. Вы также можете использовать Wireshark, Microsoft Message Analyzer, или Tcping для исследования проблем с сетевым подключением со стороны клиента »(от Microsoft) - вопрос здесь, это ошибка, а почему 200?

Интересно, это причины, вызвавшие мою проблему?

Для первого, насколько я понимаю, это на самом деле не ошибка, просто говорится, что версия, кэшированная клиентом, такая же, как версия сервера. Но когда моя клиентская сторона видит этот ответ, она думает, что это ошибка, и генерирует исключение, и поэтому изображение не отображается? (На самом деле я отдал свою клиентскую сторону на аутсорсинг, поэтому могу только догадываться)

Что касается второго, это потому, что тайм-аут моей клиентской стороны короче тайм-аута серверной? Но является ли тайм-аут тайм-аутом соединения или тайм-аутом сокета? каковы значения по умолчанию на стороне клиента и в Azure Blob?

Мой сервер Azure расположен в Восточной Азии (Гонконг), но мои пользователи находятся в материковом Китае. Интересно, могло ли это вызвать проблемы? Но когда несколько пользователей протестировали в Китае, все прошло хорошо.

Многие изображения на самом деле очень маленькие, всего от одной до двухсот k. Некоторые всего 11к.

Не могу понять, в чем причина ...


person martial    schedule 10.02.2015    source источник


Ответы (1)


Это общедоступные изображения? Если да, мы предлагаем использовать CDN для обслуживания больших двоичных объектов в Azure, поскольку при масштабировании числа потребителей вы можете выйти за пределы регулирования одного популярного образа.

Кроме того, будет хорошо убедиться, что между вашим приложением и хранилищем Azure нет сетевых проблем, которые могут привести к отключению клиента конечного пользователя до истечения тайм-аута в службе хранилища. Первый шаг - использовать Wireshark или Microsoft Message Analyzer для исследования проблем с сетевым подключением. Следуйте инструкциям «Использование Wireshark для захвата сетевого трафика» (http://azure.microsoft.com/en-us/documentation/articles/storage-monitoring-diagnosing-troubleshooting/) в приложении Мониторинг, диагностика и устранение неполадок хранилища Microsoft Azure для определения причины проблемы по сети дропов.

person Aung Oo - MSFT    schedule 05.03.2015