3

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

在某些网络特别是低带宽中,我在 40 秒内收到超时错误,然后 web 服务方法在 60 秒内完成任务。

现在我想实现 web 服务异步调用来支持低带宽网络。

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

在此处输入图像描述

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

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

在此处输入图像描述

如何在.net 中实现第二种方法?是否可以?

谢谢。

4

1 回答 1

1

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

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

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

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

我不确定您的服务到底在做什么,但是如果您的进程的操作只是修改数据库上的某些表,那么实现这一点并不难。

于 2012-07-10T10:13:45.900 回答