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

时间:2012-07-10 07:57:12

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

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

在某些网络中,特别是低带宽,我会在webservice方法在60秒内执行任务之前的40秒内收到超时错误。

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

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

enter image description here

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

我需要另一种方法。我的客户端调用webservice方法和方法中的一个线程启动它的操作,当任务完成时, 1)webservice发送一条消息,表明你的响应已准备就绪,或者 2)客户端检查是否有webservice响应准备就绪(我认为是民意调查机制)如下图所示。

enter image description here

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

    1. 当流程完成时,将EndTime存储在上表中。
    2. 通过检查上表提供一种发送进程状态的方法。
    3. 提供发送回复的方法。
    4. 我不确定你的服务到底在做什么,但是如果你的进程的操作只是为了修改数据库上的某个表,那么实现它并不困难。