Angular 4 дважды вызывает WCF REST

#angular #angular-http #wcf-rest #angular-observable

#angular #angular-http #wcf-rest #angular-наблюдаемый

Вопрос:

Я пишу демонстрационное приложение, которое будет вызывать службу WCF rest из моего приложения Angular 4, используя HTTP service post. Я могу успешно отправить свои данные в свой метод обслуживания (operationcontract). Но он вызывает мой сервис два раза, и во второй раз он попадает в метод service. В первый раз он просто попадает в Global.asax файл. Так ли работает http-публикация angular?

Далее следует вызов службы:

введите описание изображения здесь

Ниже приведен операционный контракт или метод службы rest:

введите описание изображения здесь

Ниже приведена реализация сервиса:

введите описание изображения здесь

Ниже приведен Global.asax код:

Этот глобальный код.asax попадает дважды, я не понимаю, почему?

введите описание изображения здесь

Ниже приведена подробная информация о сетевой вкладке панели инструментов Chrome dev, она дважды вызывает WCF rest.

введите описание изображения здесь

Вторичным является сетевой запрос chrome и ответ: первый вызов, который является вызовом ‘option’: введите описание изображения здесь

Второй вызов, который является post-вызовом:

введите описание изображения здесь

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

1. Вместо того, чтобы делиться скриншотами / изображениями, пожалуйста, поделитесь своим кодом здесь. Например, в моей стране imgur.com запрещено (не спрашивайте почему :)) и я не могу видеть, что на изображениях. И, конечно, люди не могут искать текст в изображениях, верно?

2. похоже, вы используете CORS. Итак, можете ли вы подтвердить (просмотрев вкладку chrome dev tools network или иным образом), что первый вызов не является вызовом OPTIONS? developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS

Ответ №1:

Как уже сказал Итан: вы используете CORS. Таким образом, веб-браузер сначала вызывает конечную точку с запросом параметров.

НО это не приведет к повторному вызову Rest-API (вы можете проверить это с помощью ведения журнала сервера или просто точек останова в вашем сервере). Я думаю, что ваш интерфейс запущен в режиме разработки (вы можете проверить это в своем браузере-log -> angular создает запись в журнале, если он запущен в режиме разработки).

В режиме разработки angular дважды проверяет каждое взаимодействие с пользователем и (имхо) каждый http-вызов в режиме разработки, чтобы предотвратить ошибки синхронизации — и «значение, измененное после проверки».

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

1. Привет, Тобиас, Итан, пожалуйста, посмотрите последний отредактированный параметр в запросе. Вы можете видеть события панели инструментов Chrome dev

2. да, он вызывает дважды. до сих пор нет подсказки, какой это http-метод. Может быть OPTIONS-method для cors и POST для «реального» вызова

3. кстати: вам не нужно, JSON.stringify(servers) поддерживает ли ваш серверный сервер json-post-body

4. вызывается ли rest дважды? Это будет проблемой с производительностью. Архитектор моей команды не позволит мне этого сделать. Так ли это для всех rest API? Spring rest, Java Rest — во всех этих случаях он будет вызываться дважды? Так ли это работает или виноват мой код?

5. Как сказал @Tobias, два запроса не означают два вызова API. Если вы откроете сведения о первом запросе, вы, вероятно, увидите, что для метода HTTP установлено значение OPTIONS. Это означает, что Angular запускает CORS.