2017-02-13 14 views
0

Вопрос

Как решить это сообщение об ошибке для простой таблицы, которую я создал на Microsoft Azure Portal? Эта ошибка возникает, когда я звоню MobileServiceClient.SyncContext.PushAsync:Azure Easy Table: Request Entity Too Large

OperationKind: Insert 

Error Result: { 
    "error": "request entity too large" 
} 

NuGet Пакеты

Я использую следующие NuGet пакеты:

  • Microsoft.Azure.Mobile.Client v3.1.0
  • Microsoft. Azure.Mobile.Client.SQLiteStore v3.1.0

Код

static bool _isInitialized; 
    static MobileServiceClient _mobileService; 

    public static async Task<IEnumerable<T>> GetItemsAsync<T>() where T : EntityData 
    { 
     await Initialize<T>(); 

     await SyncItemsAsync<T>(); 

     return await _mobileService.GetSyncTable<T>().ToEnumerableAsync(); 
    } 

    public static async Task<T> GetItem<T>(string id) where T : EntityData 
    { 
     await Initialize<T>(); 

     await SyncItemsAsync<T>(); 

     return await _mobileService.GetSyncTable<T>().LookupAsync(id); 
    } 

    public static async Task AddItemAsync<T>(T item) where T : EntityData 
    { 
     await Initialize<T>(); 

     await _mobileService.GetSyncTable<T>().InsertAsync(item); 
     await SyncItemsAsync<T>(); 
    } 

    public static async Task UpdateItemAsync<T>(T item) where T : EntityData 
    { 
     await Initialize<T>(); 

     await _mobileService.GetSyncTable<T>().UpdateAsync(item); 
     await SyncItemsAsync<T>(); 
    } 

    public static async Task RemoveItemAsync<T>(T item) where T : EntityData 
    { 
     await Initialize<T>(); 

     await _mobileService.GetSyncTable<T>().DeleteAsync(item); 
     await SyncItemsAsync<T>(); 
    } 

    static async Task SyncItemsAsync<T>() where T : EntityData 
    { 
     await Initialize<T>(); 

     try 
     { 
      await _mobileService.SyncContext.PushAsync(); 
      await _mobileService.GetSyncTable<T>().PullAsync($"all{typeof(T).Name}", _mobileService.GetSyncTable<T>().CreateQuery()); 
     } 
     catch (Exception ex) 
     { 
      System.Diagnostics.Debug.WriteLine($"Error during Sync occurred: {ex.Message}"); 
     } 
    } 

    async static Task Initialize<T>() where T : EntityData 
    { 
     if (_isInitialized) 
      return; 

     _mobileService = new MobileServiceClient(AzureConstants.AppServiceUrl); 

     await ConfigureOnlineOfflineSync<T>(); 

     _isInitialized = true; 
    } 

    static async Task ConfigureOnlineOfflineSync<T>() where T : EntityData 
    { 
     var path = Path.Combine(MobileServiceClient.DefaultDatabasePath, "azureSyncDatabase.db"); 
     var store = new MobileServiceSQLiteStore(path); 
     store.DefineTable<T>(); 

     await _mobileService.SyncContext.InitializeAsync(store, new SyncHandler(_mobileService)); 
    } 
+0

Помогает ли это? http://stackoverflow.com/questions/36496043/azure-app-service-limits-body-size-to-64kb – Krumelur

+0

Эй, @ Krumelur! Это имеет смысл, но я не уверен, как настроить бэкэнд, потому что я использовал Azure Easy Tables, и я вручную не создавал API. –

ответ

1

Бэкэнд Azure Mobile Apps - это только сайт Node.js, который предварительно настроен для вас. Вы можете использовать редактор приложений приложений, чтобы увидеть код за кулисами.

Посмотрите на Azure Mobile Apps Node.js HOWTO - в нем содержится раздел, позволяющий увеличить размер полезной нагрузки. Просто выполните изменения в редакторе служб приложений и перезапустите службу. Ищите HOWTO: Handle Большие загрузки файлов

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