500 Внутренняя ошибка сервера при вставке в мобильные службы Windows Azure?

При использовании следующего кода, измененного с веб-сайта Azure для мобильных служб, я получаю "Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException was unhandledMessage: Internal Server Error (500 InternalServerError - Details: {" code ": 500," error ":" Internal Ошибка сервера "})" ошибка.

Мой код:

    private MobileServiceCollectionView<pin> Pins;
    private IMobileServiceTable<pin> pinTable = App.MobileService.GetTable<pin>();
    public class pin
    {
        public string name { get; set; }
        public long timestamp { get; set; }
        public string type { get; set; }
        public object content { get; set; }
        public string category { get; set; }
        public string comments { get; set; }
        public int Id { get; set; }
    }
    private LiveConnectSession session;
    private async System.Threading.Tasks.Task Authenticate()
    {
        //authentication code from the Azure site, I deleted it here to save space.
    }
    public MainPage()
    {
        this.InitializeComponent();
    }
    public long getTimestamp()
    {
        //Find unix timestamp (seconds since 01/01/1970)
        long ticks = DateTime.UtcNow.Ticks - DateTime.Parse("01/01/1970 00:00:00").Ticks;
        ticks /= 10000000; //Convert windows ticks to seconds
        return ticks;
    }
    public async Task<bool> Refresh()
    {
        List<string> CategoriesMixed = new List<string>();
        Pins = pinTable.Where(pin => true).ToCollectionView();
        if (Pins.Count < 1)
        {
            pin pin = new pin();
            pin.category = "Welcome";
            pin.content = "Hello, World!";
            pin.name = "No Pins :(";
            pin.comments = string.Empty;
            pin.timestamp = getTimestamp();
            pin.type = "text";
            await pinTable.InsertAsync(pin);
        }
        else
        {
            foreach (pin nowPin in Pins)
            {
                await pinTable.DeleteAsync(nowPin); //since I'm still trying to get the inserting pins thing to work, I'm having it delete all pins it finds for the user.
            }
        }
        return true;
    }
    /// <summary>
    /// Invoked when this page is about to be displayed in a Frame.
    /// </summary>
    /// <param name="e">Event data that describes how this page was reached.  The Parameter
    /// property is typically used to configure the page.</param>
    protected override async void OnNavigatedTo(NavigationEventArgs e)
    {
        await Authenticate();
        await Refresh();
    }

Одна вещь, которая может быть важной, - это то, что я смог вставить один вывод в базу данных, но после этого возникает эта ошибка. Кроме того, если я помещаю точку останова в строку if (Pins.Count ‹1), это показывает, что Pins.Count возвращает 0, когда в базе данных есть контакт.

Кроме того, на портале управления Azure у меня есть следующий сценарий для Insert (из http://www.windowsazure.com/en-us/develop/mobile/tutorials/authorize-users-in-scripts-dotnet/):

function insert(item, user, request) {
  item.userId = user.userId;    
  request.execute();
}

и мой сценарий для чтения:

function read(query, user, request) {
   query.where({ userId: user.userId });    
   request.execute();
}

Ошибка возникает в "await pinTable.InsertAsync (pin);" строка внутри Refresh (). На моем портале управления Azure нет журналов ошибок. Если есть еще какая-то информация, просто спросите :)

Обновление 1. Я думаю, что моя проблема связана с http://social.msdn.microsoft.com/Forums/en-US/azuremobile/thread/82ae07a1-5832-4dc9-97d7-1cda1fb33bc2, но ответа на этот вопрос пока нет.


person MatthewSot    schedule 15.09.2012    source источник
comment
Всякий раз, когда вы получаете 500 InternalServerError на клиенте, вы можете перейти в консоль администратора мобильных служб в Azure и проверить журнал, чтобы получить дополнительные сведения об исключении, которое было создано на стороне сервера. Я знаю, что это было исправлено, но эта информация может помочь другим при рассмотрении этого вопроса.   -  person Murven    schedule 02.12.2014


Ответы (1)


Я думаю, что строка ниже создает проблему

Pins = pinTable.Where(pin => true).ToCollectionView(); 

ToCollectionView(); всегда возвращает count как 0. Это ошибка. Как вы думаете, Джош Твист?

Ставрос: Я думаю, что строка ниже может помочь вашей программе работать без сбоев.

List<Pin> Pins = await pinTable.Where(pin => true).ToListAsync(); 
person Naren P    schedule 26.09.2012
comment
Я просто переделал весь свой код, и это сработало :) но я думаю, что это помогло бы, поэтому спасибо: D - person MatthewSot; 27.09.2012