Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决需要花费太多时间的web服务调用?_C#_Wcf_Rest_Asp.net Web Api - Fatal编程技术网

C# 如何解决需要花费太多时间的web服务调用?

C# 如何解决需要花费太多时间的web服务调用?,c#,wcf,rest,asp.net-web-api,C#,Wcf,Rest,Asp.net Web Api,我正在开发一个需要从MVC WebApi服务器获取数据的Windows RT应用程序。 问题是响应可能需要几秒钟到3分钟 解决这个问题的最佳方法是什么 现在,我调用web api的async并设置一个长超时值以避免异常。这是个好办法吗?我不太喜欢,因为服务器一直都有一个打开的连接。它会对服务器性能产生显著影响吗 除了web服务,还有类似“回调”的东西吗?我的意思是服务器调用客户端来发送数据。是的,有一些方法可以让服务器调用回调客户端,例如WCF双工通信。然而,这些技术通常会保持连接打开(在大多数

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

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

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


除了web服务,还有类似“回调”的东西吗?我的意思是服务器调用客户端来发送数据。

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


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

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


三分钟-哇,服务器做什么?无论如何,如果您正在编写服务器,一个选项可能是使用web服务调用来启动计算,然后使用另一个调用来反复轮询结果,直到结果准备就绪。虽然简单地增加超时时间可能也是一种有效的方法。好的评论。。。如果无法更快地执行服务器端活动,另一种方法是为请求的操作返回“令牌”,并让客户端轮询完成。不是最优的,但可能比保持连接打开要好。不过,您仍然需要管理服务器端清理。