Проблема
У меня есть приложение для Windows Phone 8. Из приложения пользователи могут загружать фотографии, а затем добавлять запись в таблицу для обработки с помощью службы Azure Mobile. Одним из столбцов в таблице является DeviceId. Эта часть работает нормально.
В другом представлении люди могут загрузить список записей, которые они уже добавили. К сожалению, для некоторых пользователей это не работает, так как не возвращает никаких записей (я могу найти их записи в базе данных).
Пожалуйста, помогите, так как я не могу понять, почему это работает для одних пользователей, а не для других.
Вот как я получаю DeviceUniqueId:
byte[] myDeviceID = (byte[])Microsoft.Phone.Info.DeviceExtendedProperties.GetValue("DeviceUniqueId");
string DeviceIDAsString = Convert.ToBase64String(myDeviceID);
Вот как я добавляю новые записи: TimelapseBatch.DeviceId (первый параметр в конструкторе — строка)
var item = new TimelapseBatch(DeviceInfo.DeviceUniqueId, /*other properties go here*/);
await App.MobileService.GetTable<TimelapseBatch>().InsertAsync(item);
Как я запрашиваю службу
private readonly IMobileServiceTable<TimelapseBatch> batchesTable = App.MobileService.GetTable<TimelapseBatch>();
...
batches = await batchesTable.Where(t => t.DeviceId == DeviceInfo.DeviceUniqueId).ToListAsync();
var processed = batches.Where(t => t.StatusCode == (int)BatchStatus.Processed).OrderByDescending(t => t.Processed).Select(t => new Timelapse()
{
Page = new Uri(t.PlayerUrl),
Thumbnail = new Uri(t.ThumbnailUrl)
}).ToList();
По-видимому, после всей этой обработки не содержится никаких записей, хотя в соответствии с базой данных это должно быть.
Я убедился, что когда одни и те же пользователи (даже те, у которых возникают проблемы) создают несколько записей, DeviceId в базе данных кажется одинаковым.
Пожалуйста, помогите, почему это может работать для некоторых пользователей, но не для других???
ОБНОВЛЕНИЕ
Поэтому, когда я использую DeviceUniqueId от клиентов, у которых возникли проблемы, я могу воспроизвести проблему.
Кроме того, если я сделаю это так:
batches = await batchesTable.Take(200).ToListAsync();
batches = batches.Where(t => t.DeviceId == DeviceInfo.DeviceUniqueId).ToList();
Он заполняет партии, как и ожидалось. Однако, если я сделаю это (ниже), пакеты будут пустыми (я указал 200 для целей тестирования, так как записей меньше).
batches = await batchesTable.Take(200).Where(t => t.DeviceId == DeviceInfo.DeviceUniqueId).ToListAsync();
ОБНОВЛЕНИЕ 2
Похоже, что сравнение не выполняется, если DeviceId содержит знак «+». Если я сделаю
t.DeviceId.Substring(0,X) == DeviceInfo.DeviceUniqueId.Substring(0,X)
Где X - это позиция знака +, тогда он работает так, как ожидалось. Мой Бог. Теперь я отчаянно пытаюсь найти обходной путь.
ОБНОВЛЕНИЕ 3
Определение типа:
public enum BatchStatus
{
QueuedUp = 0,
Processed = 1,
Error = 2,
}
public class TimelapseBatch
{
public TimelapseBatch()
{
TimelapseId = String.Empty;
DeviceId = String.Empty;
ContainerUrl = String.Empty;
VideoMp4Url = String.Empty;
VideoWebmUrl = String.Empty;
ThumbnailUrl = String.Empty;
Uploaded = new DateTime(2000, 1, 1);
Processed = new DateTime(2000, 1, 1);
PlayerUrl = String.Empty;
}
public TimelapseBatch(string deviceId, string timelapseId, string containerUrl, int photosCount, int fps):this()
{
DeviceId = deviceId;
ContainerUrl = containerUrl;
TimelapseId = timelapseId;
PhotosCount = photosCount;
Fps = fps;
StatusCode = (int) BatchStatus.QueuedUp;
Uploaded = DateTime.Now;
}
public int Id { get; set; }
public int StatusCode { get; set; }
public string TimelapseId { get; set; }
public string DeviceId { get; set; }
public string ContainerUrl { get; set; }
public int PhotosCount { get; set; }
public int Fps { get; set; }
public DateTime Uploaded { get; set; }
public string VideoMp4Url { get; set; }
public string VideoWebmUrl { get; set; }
public string ThumbnailUrl { get; set; }
public double VideoSize { get; set; }
public DateTime Processed { get; set; }
public string PlayerUrl { get; set; }
}
batches
или поprocessed
? - person carlosfigueira   schedule 27.03.2013batches
один. - person Maxim   schedule 27.03.2013DeviceId
? Можете опубликовать определение типа? - person carlosfigueira   schedule 27.03.2013