【问题标题】:How to solve calls to web services that take too time?如何解决对 Web 服务的调用耗时过长?
【发布时间】:2013-01-17 18:24:18
【问题描述】:

我正在开发一个需要从 MVC WebApi 服务器获取数据的 Windows RT 应用程序。 问题是响应可能需要几秒钟到 3 分钟。

解决这个问题的最佳方法是什么?

现在,我向 web api 调用 async 并设置一个较长的超时值以避免异常。这是一个好方法吗?我不太喜欢,因为服务器一直打开一个开放的连接。是否会对服务器性能产生重大影响?

除了 Web 服务之外,是否有类似“回调”的东西?我的意思是服务器调用客户端发送数据。

【问题讨论】:

  • 三分钟-哇,服务器做什么?无论如何,如果您正在编写服务器,一个选项可能是调用 Web 服务来启动计算,然后再调用另一个选项来反复轮询结果,直到它准备好。虽然简单地增加超时可能也是一种有效的方法。

标签: c# wcf rest asp.net-web-api


【解决方案1】:

是的,有一些方法可以让服务器回调客户端,例如 WCF 双工通信。但是,这种技术通常会保持连接打开(在大多数情况下,这是 TCP 会话)。大多数 Web 服务器不支持大量并发请求,因此对服务器的每次长时间调​​用都会增加并发连接的客户端的数量。这将导致在不应该的地方大量使用资源。如果你有很多客户,这样的架构肯定会失败。

REST 请求应该是轻量级、小型和快速的。考虑使用数据库来存储临时结果和工作服务器,以处理负载。这是服务器端问题,不是客户端问题。

【讨论】:

  • 好评论...如果服务器端活动不能更快地执行,另一种方法是为请求的操作返回一个“令牌”并让客户端轮询完成。不是最佳的,但可能比保持连接打开更好。不过,您仍然需要管理服务器端清理。
【解决方案2】:

最后我使用 WebSockets 解决了它(感谢 oleksii)。它使连接保持打开状态,但我避免重复轮询结果。现在,当服务器完成该过程时,将数据直接发送到客户端。 WebSockets 是一种通过 TCP 进行中继的协议,并且已经标准化。

http://en.wikipedia.org/wiki/WebSocket

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 2021-12-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2014-05-22
    • 1970-01-01
    相关资源
    最近更新 更多