Angular 5 и .Net Core 2.1 - Http-запрос зависает - PullRequest
0 голосов
/ 11 октября 2018

У меня есть приложение (серверная часть Asp.Net Core 2.1, Angular 5 front-end), размещенное на AWS.Чтобы создать объект, содержащий информацию об учетной записи пользователя, я делаю несколько запросов Http для получения информации об учетной записи.Однако во многих случаях приложение зависает при попытке выполнить запросы этой серии.Я пробовал разные способы объединения запросов, и все они имеют одну и ту же проблему (с различной частотой сбоев), но все они вызывают у меня одну и ту же проблему.Я пробовал combineLatest, Observable.joinFork и цепочки подписок.Последний вариант действительно ужасен, но, похоже, он выдает ошибку реже, чем другие два метода.

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

Я не чувствую, что это чрезмерное количество запросов ... но я, очевидно, делаю что-то не так.Любые идеи?

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


ОбъединитьПоследние

const filterParams = { accountId: account.id };

return combineLatest(
  this.getAccount(account.id),
  this.adfiService.listAdfis(filterParams),
  this.feedService.listFeeds(filterParams),
  this.feedGroupService.listFeedGroups(filterParams),
  this.feedGroupService.listLivestocks(filterParams),
  this.farmService.listFarms(filterParams),
  this.gatewayService.listGateways(filterParams),
  this.barnService.listBarns(filterParams),
  this.binService.listBins(filterParams),
  this.sensorService.listSensors(filterParams),
  this.definitionService.listDefinitions(filterParams),
  this.userService.listUsers(filterParams)
).map(([res1, res2, res3, res4, res5, res6, res7, res8, res9, res10, res11, res12]) => {
  this.accountObservable = {
    account: res1 as Account,
    adfis: res2 as Adfi[],
    feeds: res3 as Feed[],
    feedGroups: res4 as FeedGroup[],
    livestocks: res5 as Livestock[],
    farms: res6 as Farm[],
    gateways: res7 as Gateway[],
    barns: res8 as Barn[],
    bins: res9 as Bin[],
    sensors: res10 as Sensor[],
    definitions: res11 as Definition[],
    users: res12 as User[]
  } as AccountObservable;
  return this.setVariables(this.accountObservable);
});


Observable.forkJoin

const filterParams = { accountId: account.id };

return Observable.forkJoin(
  this.getAccount(account.id).map(res => res),
  this.adfiService.listAdfis(filterParams).map(res => res),
  this.feedService.listFeeds(filterParams).map(res => res),
  this.feedGroupService.listFeedGroups(filterParams).map(res => res),
  this.feedGroupService.listLivestocks(filterParams).map(res => res),
  this.farmService.listFarms(filterParams).map(res => res),
  this.gatewayService.listGateways(filterParams).map(res => res),
  this.barnService.listBarns(filterParams).map(res => res),
  this.binService.listBins(filterParams).map(res => res),
  this.sensorService.listSensors(filterParams).map(res => res),
  this.definitionService.listDefinitions(filterParams).map(res => res),
  this.userService.listUsers(filterParams).map(res => res)
).map(res => {
  this.Observable.forkJoin = {
    account: res[0] as Account,
    adfis: res[1] as Adfi[],
    feeds: res[2] as Feed[],
    feedGroups: res[3] as FeedGroup[],
    livestocks: res[4] as Livestock[],
    farms: res[5] as Farm[],
    gateways: res[6] as Gateway[],
    barns: res[7] as Barn[],
    bins: res[8] as Bin[],
    sensors: res[9] as Sensor[],
    definitions: res[10] as Definition[],
    users: res[11] as User[]
  } as AccountObservable;
  return this.setVariables(this.accountObservable);
});


Цепные подписки

const filterParams = { accountId: this.selectedAccount.id };

return this.getAccount(this.selectedAccount.id).map(
  (res: Account) => {
    this.selectedAccount = res;
    this.accountObservable.account = res;
    this.adfiService.listAdfis(filterParams).subscribe(
      (res: Adfi[]) => { this.accountObservable.adfis = res },
      () => {},
      () => {
        this.accountLoadingStatus.emit("adfis (5%)");
        this.feedGroupService.listLivestocks(filterParams).subscribe(
          (res: Livestock[]) => { this.accountObservable.livestocks = res },
          () => {},
          () => {
            this.accountLoadingStatus.emit("livestocks (10%)");
            this.feedService.listFeeds(filterParams).subscribe(
              (res: Feed[]) => { this.accountObservable.feeds = res },
              () => { },
              () => {
                this.accountLoadingStatus.emit("feeds (20%)");
                this.feedGroupService.listFeedGroups(filterParams).subscribe(
                  (res: FeedGroup[]) => { this.accountObservable.feedGroups = res },
                  () => { },
                  () => {
                    this.accountLoadingStatus.emit("feed groups (30%)");
                    this.farmService.listFarms(filterParams).subscribe(
                      (res: Farm[]) => { this.accountObservable.farms = res },
                      () => { },
                      () => {
                        this.accountLoadingStatus.emit("farms (35%)");
                        this.gatewayService.listGateways(filterParams).subscribe(
                          (res: Gateway[]) => { this.accountObservable.gateways = res },
                          () => { },
                          () => {
                            this.accountLoadingStatus.emit("gateways (40%)");
                            this.barnService.listBarns(filterParams).subscribe(
                              (res: Barn[]) => { this.accountObservable.barns = res },
                              () => { },
                              () => {
                                this.accountLoadingStatus.emit("barns (50%)");
                                this.binService.listBins(filterParams).subscribe(
                                  (res: Bin[]) => { this.accountObservable.bins = res },
                                  () => { },
                                  () => {
                                    this.accountLoadingStatus.emit("bins (60%)");
                                    this.sensorService.listSensors(filterParams).subscribe(
                                      (res: Sensor[]) => { this.accountObservable.sensors = res },
                                      () => { },
                                      () => {
                                        this.accountLoadingStatus.emit("sensors (70%)");
                                        this.definitionService.listDefinitions(filterParams).subscribe(
                                          (res: Definition[]) => { this.accountObservable.definitions = res },
                                          () => { },
                                          () => {
                                            this.accountLoadingStatus.emit("reading types (80%)");
                                            this.userService.listUsers(filterParams).subscribe(
                                              (res: User[]) => { this.accountObservable.users = res },
                                              () => { },
                                              () => {
                                                this.accountLoadingStatus.emit("users (90%)");
                                                return this.setVariables(this.accountObservable);
});});});});});});});});});});});});


Успешный запрос

enter image description here


Неудачный запрос

enter image description here Все запросы после зависшего отменяются.

...