Внутренний сервер Angular 6 HttpErrorResponse 500 на большом наборе записей

#angular #httpresponse

#angular #httpresponse

Вопрос:

Я работаю над приложением Angular 6 / MVC / C #. У меня есть Kendo grid, где пользователь может копировать / вставлять записи из Excel и кнопку Сохранения, которая вызывает службу ValidateNSave. Эта служба выполняет Post-запрос к коду на стороне сервера. Он работает отлично, как и ожидалось, пока количество записей составляет около 100. Но для большего количества записей он начинает выдавать ошибку в консоли, как показано ниже, и не попадает в код на стороне сервера. Пользователю может потребоваться скопировать / вставить до 1000 записей.

 zone.js:3243 POST http://localhost:52609/BASE/MyProj//MyProjApi/ValidateReportData 500 (Internal Server Error)
scheduleTask @ zone.js:3243
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask @ zone.js:410
onScheduleTask @ zone.js:301
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.scheduleTask @ zone.js:404
push../node_modules/zone.js/dist/zone.js.Zone.scheduleTask @ zone.js:238
push../node_modules/zone.js/dist/zone.js.Zone.scheduleMacroTask @ zone.js:261
scheduleMacroTaskWithCurrentZone @ zone.js:1245
(anonymous) @ zone.js:3276
proto.<computed> @ zone.js:1569
(anonymous) @ http.js:1629
push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe @ Observable.js:161
(anonymous) @ subscribeTo.js:21
subscribeToResult @ subscribeToResult.js:6
push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._innerSub @ mergeMap.js:127
push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._tryNext @ mergeMap.js:124
push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapSubscriber._next @ mergeMap.js:107
push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next @ Subscriber.js:93
(anonymous) @ scalar.js:5
push../node_modules/rxjs/_esm5/internal/Observable.js.Observable._trySubscribe @ Observable.js:176
push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe @ Observable.js:161
push../node_modules/rxjs/_esm5/internal/operators/mergeMap.js.MergeMapOperator.call @ mergeMap.js:80
push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe @ Observable.js:158
push../node_modules/rxjs/_esm5/internal/operators/filter.js.FilterOperator.call @ filter.js:55
push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe @ Observable.js:158
push../node_modules/rxjs/_esm5/internal/operators/map.js.MapOperator.call @ map.js:51
push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe @ Observable.js:158
push../node_modules/rxjs/_esm5/internal/operators/map.js.MapOperator.call @ map.js:51
push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe @ Observable.js:158
push../node_modules/rxjs/_esm5/internal/operators/tap.js.DoOperator.call @ tap.js:60
push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe @ Observable.js:158
push../node_modules/rxjs/_esm5/internal/operators/catchError.js.CatchOperator.call @ catchError.js:17
push../node_modules/rxjs/_esm5/internal/Observable.js.Observable.subscribe @ Observable.js:158
push../src/app/components/forms/report-group-start-date.component.ts.ReportDataStartDateComponent.validateChanges @ report-group-start-date.component.ts:666
eval @ ReportDataStartDateComponent.ngfactory.js:39
handleEvent @ core.js:10251
handleEvent @ core.js:10796
dispatchEvent @ core.js:7710
(anonymous) @ core.js:8154
(anonymous) @ platform-browser.js:988
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask @ zone.js:423
onInvokeTask @ core.js:3811
push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask @ zone.js:422
push../node_modules/zone.js/dist/zone.js.Zone.runTask @ zone.js:195
push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask @ zone.js:498
invokeTask @ zone.js:1744
globalZoneAwareCallback @ zone.js:1770
Show 16 more frames
validateNSaveService.service.ts:1370 Http failure response for http://localhost:52609/BASE/MyProj//MyProjApi/ValidateReportData: 500 Internal Server Error handleError in service ValidateNSave
core.js:1673 ERROR Http failure response for http://localhost:52609/BASE/MyProj//MyProjApi/ValidateReportData: 500 Internal Server Error
  

Служба сохранения проверки:

 public validateReportData(indata: any): Observable<any[]> {
        var url = this.ValidateReportDataUrl;

        return this.http.post(url, indata)
            .pipe(map(res => <any[]>res))
            .pipe(
                tap(data => {
                    this.data = data.map(item => {
                        if (item.StartDate != null amp;amp; item.StartDate != "")
                               item.StartDate = new Date(item.StartDate).toLocaleString("en", this.options).replace(/[^ -~]/g, '');
                        if (item.StopDate != null amp;amp; item.StopDate != "")
                            item.StopDate = new Date(item.StopDate).toLocaleDateString("en", this.options).replace(/[^ -~]/g, '');

                    })
                }))
            .pipe(catchError(this.handleError));
    }

private handleError(error: any) {

        let errMsg = (error.message) ? error.message :
            error.status ? `${error.status} - ${error.statusText}` : 'Server error in Validate and Save';
          console.log(errMsg, 'handleError in service ValidateNSave');


        return Observable.throw(errMsg);
    }
  

Кроме того, проект использует

«rxjs»: «6.2.0»,
«rxjs-compat»: «6.2.2», (package.json)
Я не могу понять, что вызывает ошибку и каким должно быть разрешение. Пожалуйста, направляйте!

Комментарии:

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

2. Как можно «не попадать в серверный код» и, тем не менее, получать внутреннюю ошибку сервера (или какой-либо статус HTTP на самом деле)?

3. мбойко / ноам, серверный код находится в контроллере MVC, а затем в классе, и там у меня есть точки останова. Поэтому, когда копируется большое количество строк, элемент управления не попадает в эти точки останова, а нажимает ‘ tap (data => { ‘ в validateReportData, а затем вызывается catchError(this.HandleError).

4. Есть ли способ увеличить лимит данных?