Angular 4 两次调用 WCF REST

Posted

技术标签:

【中文标题】Angular 4 两次调用 WCF REST【英文标题】:Angular 4 calls WCF REST twice 【发布时间】:2019-08-09 00:25:47 【问题描述】:

我正在编写一个演示应用程序,它将使用 HTTP 服务发布从我的 Angular 4 应用程序调用 WCF 休息服务。 我可以成功地将我的数据发布到我的服务方法(操作合同)。 但它两次调用我的服务,第二次调用服务方法。 第一次它只是命中Global.asax 文件。 这是 Angular 的 http 帖子的工作原理吗?

以下是服务调用:

以下是操作契约或休息服务方式:

以下是服务实现:

下面是Global.asax代码:

这个 Global.asax 代码被命中两次,我不明白为什么?

以下是 Chrome 开发工具栏网络选项卡的详细信息,它调用 WCF 休息两次。

Fallowing 是 chrome 网络请求和响应: 第一次调用是“选项”调用:

第二次通话是后期通话:

【问题讨论】:

请在此处分享您的代码,而不是分享屏幕截图/图像。例如,在我的国家 imgur.com 是被禁止的(不要问为什么 :))而且我看不到图片中的内容。当然,人们不能搜索图片中的文字,对吧? 您似乎在使用 CORS。那么您能否确认(通过查看 chrome 开发工具网络选项卡或其他方式)第一次调用不是 OPTIONS 调用? developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS 【参考方案1】:

正如 Ethan 已经说过的:您正在使用 CORS。因此,网络浏览器首先使用 OPTIONS 请求调用端点。

但是这不会调用 Rest-API 两次(您可以使用后端日志记录或仅在后端中的断点进行检查)。 我认为您的前端在开发模式下运行(您可以在浏览器日志中检查这一点 -> 如果它在开发模式下运行,角度会创建一个日志条目)。

在开发模式下,角度双重检查每个用户交互和(恕我直言)开发模式下的每个 http 调用,以防止计时和“检查后更改值”错误。

【讨论】:

嗨 Tobias,Ethan,请查看查询中最后编辑的选项。可以看到chrome dev工具栏事件 是的,它调用了两次。仍然不知道这些是哪种 http 方法。可能是 cors 的 OPTIONS 方法和“真实”调用的 POST 方法 顺便说一句:如果您的后端支持 json-post-body,则不需要 JSON.stringify(servers) 如果 rest 被调用两次?这将是一个性能问题。我团队的架构师不允许我这样做。所有其他 API 都是这种情况吗? Spring rest,Java Rest - 在所有这些情况下它会调用两次?这是它的工作原理还是我的代码是罪魁祸首? 正如@Tobias 所说,两个请求并不意味着两个API 调用。如果您打开第一个请求详细信息,您可能会看到 HTTP 方法设置为 OPTIONS。这意味着 Angular 正在运行 CORS。

以上是关于Angular 4 两次调用 WCF REST的主要内容,如果未能解决你的问题,请参考以下文章

Angular 组件构造函数被调用两次

Angular 2 http get observable 调用了两次

使用 Angular 元素调用组件构造函数两次

角度:httpClient请求被调用两次

Angular 4 POST 到 WCF REST 服务返回 NULL 响应

Angular ui-calendar 事件函数调用了两次