Получение ошибки "Ресурс не найден" при использовании службы "Синхронизация файлов Azure"

Столкнулся с очень странной проблемой.

Следуя этому руководству https://azure.microsoft.com/en-in/documentation/articles/app-service-mobile-xamarin-forms-blob-storage/ для реализации синхронизации файлов в приложении Xamarin Forms.

Метод Get в моей службе (GetUser, метод получения по умолчанию в контроллере службы приложений) вызывается трижды, и на 3-й итерации он дает мне ошибку 404, ресурс не найден. Первые 2 итерации работают нормально. Это звонок клиента

await userTable.PullAsync(
                        null,
                        userTable.Where(x => x.Email == userEmail), false, new System.Threading.CancellationToken(), null);

Если я удалю следующую строку,

// Initialize file sync
this.client.InitializeFileSyncContext(new TodoItemFileSyncHandler(this), store);

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

Спасибо


person Supreet    schedule 19.09.2016    source источник


Ответы (2)


Это не будет ответом, потому что недостаточно информации для продолжения. Когда вы получаете 404, это потому, что бэкэнд вернул 404. Идеальная ситуация:

  • Включите ведение журнала диагностики на портале Azure для серверной части.
  • Используйте Fiddler для мониторинга запросов
  • Когда запрос вызывает 404, посмотрите, что происходит на самом деле

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

person Adrian Hall    schedule 19.09.2016
comment
Спасибо за комментарии @Adrian. Я действительно использую бэкэнд Asp.Net. Мой вопрос: как только я прокомментирую код, который инициализирует синхронизацию файлов, все работает как обычно. Это приложение работает последние 6 месяцев точно так же. Подводя итог, включите код для FileSync, и я получаю 404, закомментируйте его, и все снова хорошо. Это дает мне подозрение, что это File Sync, который играет с чем-то здесь, - person Supreet; 20.09.2016
comment
Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: искомый ресурс был удален, его имя было изменено или он временно недоступен. Это точная ошибка, которую я получаю. Теперь я попытался обновить все пакеты nuget, объединив их все в одну версию. Однако, как я уже говорил ранее, как только я прокомментирую строку, которая инициализирует синхронизацию файлов, все работает, как и ожидалось. - person Supreet; 20.09.2016
comment
Какая конкретная конечная точка дает вам 404? Это то, что вы ищете. - person Adrian Hall; 22.09.2016
comment
drive.google.com/open?id=0BzYXG8uD6JT3ai1SN3lfRE5oNWs Я повторно создал проблему, которую я сталкиваюсь в этом образце. Это не дает мне ошибку 404, а 500, хотя симптомы такие же. Если вы прокомментируете код, связанный с синхронизацией файлов, в AzureHelper.cs в строках 44, 46 и 74 и раскомментируете вызов синхронизации данных в строке 41, все будет работать должным образом. Закомментируйте код для LN 41 и раскомментируйте File Sync в 44, 46, 74 и запустите код, вы получите ошибку 500. Это и натолкнуло меня на мысль, что ошибка где-то в File Sync изменениях, только не могу понять в каком блоке? - person Supreet; 22.09.2016
comment
Суприт - вы не ответили на первоначально заданный вопрос - какая конечная точка вызывает ошибку? Пока мы этого не узнаем, мы не сможем вам помочь. - person Adrian Hall; 24.09.2016
comment
Привет, Адриан, я не знаю, какая конечная точка вызывает проблему. Как только используется код File Sync, я нажимаю на синхронизацию, чтобы вызвать асинхронный метод синхронизации (следуя этому руководству azure.microsoft.com/en-in/documentation/articles/) вызывал метод Get для элементов задач, которые успешно выполняются и когда Я вернулся к клиенту, я получаю эту ошибку в окне ошибок. Ошибка никогда не обнаруживается ни в одном из блоков catch, поэтому я не могу быть уверен, какая конечная точка ее вызывает. Если вы запустите пример приложения, вы поймете, что я имею в виду. Спасибо - person Supreet; 24.09.2016
comment
Затем, как было предложено в ответе, который я дал, вам нужно установить Fiddler и определить его путем наблюдения. Я подозреваю, что вы не написали соответствующий контроллер для получения токена SAS для синхронизации файлов. Трассировка скрипача обеспечит это. - person Adrian Hall; 24.09.2016
comment
Спасибо, Адриан, сегодня попробую скрипача. Но если вы видите пример кода, у меня определенно есть контроллер для генерации токенов SAS. Если бы вы могли просто попробовать прилагаемое решение, вы бы заметили, что я позаботился обо всех распространенных ловушках, о которых только мог подумать. Я попробую Fiddler сегодня и обновлю здесь, если найду что-то новое. - person Supreet; 26.09.2016
comment
Привет, Адриан, с помощью скрипача я понял, что он тоже пытается найти файлы для моего объекта пользователя GET /tables/User/0d8e214a-ba22-447a-9eb5-4afb36f4c5b4/MobileServiceFiles HTTP/1.1, который не понимает, почему? У меня есть несколько объектов в моем приложении, и я намерен использовать файлы только для некоторых из них. Объект пользователя не является одним из них. Итак, 2 вопроса: 1. Будет ли он пытаться найти файл для каждого DTO, который у меня есть в моем приложении? 2. Если да, то как мне ограничить его только несколькими выбранными? С нетерпением жду вашего ответа. Спасибо - person Supreet; 26.09.2016
comment
Вот мой код reportStorageController gist.github.com/supreettare/62250b07d35e0aef9c553691553f188f, это ясно видно на основе класса Report я не понимаю, почему метод также вызывается для класса User, как подробно описано в комментарии выше. Любая помощь в правильном направлении действительно ценится. P.S. этого не происходит в примере проекта - person Supreet; 26.09.2016

теперь это отсортировано, в конце концов мне пришлось дать ему то, о чем он просил. Мне также пришлось создать контроллер хранилища для пользователя, хотя он мне не нужен, так как мне не нужно сохранять какие-либо файлы в хранилище для пользователей.

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

В этом случае это будет действительно странно, поскольку я не собираюсь использовать хранилище для всех своих объектов.

person Supreet    schedule 28.09.2016
comment
Эта проблема зарегистрирована в github, и существует обходной путь github.com/azure-appservice-samples/ContosoMoments/blob/master/ github.com/Azure/azure-mobile-apps-net-files-client/issues/34 - person Supreet; 28.09.2016