c# - 是否可以通过一个连接在 .Net 中实现异步 Web 服务调用?

标签 c# .net web-services asynchronous long-polling

我有一个 .net Web 服务。它有一个方法执行一个需要 60 秒的任务,然后将字符串结果返回给客户端。

在某些网络中,尤其是低带宽网络中,我会在 40 秒内收到超时错误,然后 webservice 方法会在 60 秒内完成其任务。

现在我想实现 webservice 异步调用以支持低带宽网络。

在异步 webservice 调用中,一种方法是使用运行 webservice 方法并将 webservice 结果返回到主线程的线程,如下图所示。

enter image description here

但我的问题不会用这种方法解决,因为该线程使用一个连接。

我需要另一种方法。我的客户端调用 webservice 方法和方法中的一个线程开始其操作,当任务完成时,1) webservice 发送一条消息,表明您的响应已准备就绪,或者,2) 客户端检查 web 服务是否response is ready(我认为轮询机制)如下图。

enter image description here

如何在 .net 中实现第二种方法?可能吗?

谢谢。

最佳答案

在您的数据库上创建一个表来存储流程的状态。

UniqClientId, ProcessId, StartTime, EndTime and any other state if required.
  1. 客户端通过传递其唯一 ID 向服务器发送请求。
  2. 服务器将进程记录到上表并启动进程。
  3. 客户端立即联系服务器(2-3 秒或 15-20 秒,具体取决于您的应用程序)以检查流程是否完成。
  4. 如果客户端得到处理已经完成的响应,则它请求服务器发送响应。

在两者之间,服务器执行以下工作。

  1. 当进程完成时,将 EndTime 存储在上表中。
  2. 提供了一种通过检查上表来发送进程状态的方法。
  3. 提供发送响应的方法。

我不确定你的服务到底在做什么,但如果你的流程操作只是修改数据库上的某个表,那么实现起来并不难。

关于c# - 是否可以通过一个连接在 .Net 中实现异步 Web 服务调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11408945/

相关文章:

c# - 用 X 小数位和 InvariantCulture 格式化数字?

c# - Silverlight 字母间距

c# - 如何重构通用异常的使用?

java - 如何在 wsdl 中为输入和输出参数提供相同的元素?

c# - 为什么将 RichTextBox 上的 XAML 属性设置为此值会使 Silverlight 崩溃?

c# - Winforms DataGridView 数据绑定(bind)到复杂类型/嵌套属性

c# - 使用 .Net 如何使用 Sort 方法对数组进行反向排序,即从 Z 到 A?

java - 通过对等方调用 SOAP 网络服务重置连接

sql - 基于定时器的事件触发器

c# - 解析文本文件并删除双引号内的逗号