从Web服务在不同的线程上调用外部Web服务

时间:2012-04-18 21:30:37

标签: asp.net .net web-services vb.net-2010

这是当前的功能:

  1. 我的网站同步调用我的ASP.NET Web服务。
  2. 我的网络服务在数据库中创建记录。
  3. 我的网络服务立即将新记录ID返回给网站。
  4. 我的网站向用户显示该记录ID。
  5. 这一直很好。我必须添加一个功能,以便在第2步之后,我的Web服务将调用1到6(取决于条件)外部Web服务。所以它看起来像这样:

    1. 我的网站同步调用我的ASP.NET Web服务。
    2. 我的网络服务在数据库中创建记录。
    3. 我的网络服务调用外部网络服务。合并结果并保存在数据库中。
    4. 我的网络服务将新记录ID返回给网站。
    5. 我的网站向用户显示该记录ID。
    6. 由于这项新功能,现在网站请求可能需要10分钟。所以这就是我想要实现新功能的方式。

      1. 我的网站同步调用我的ASP.NET Web服务。
      2. 我的网络服务在数据库中创建记录。
      3. 我的Web服务创建一个新线程并在该线程上调用一个方法(fire and forget)。此方法将调用外部Web服务,合并结果并保存在数据库中。由于这将在另一个线程上,执行将在完成步骤3之前立即转到步骤4。
      4. 我的网络服务立即将新记录ID返回给网站。
      5. 我的网站向用户显示该记录ID。
      6. 另外,我想为步骤3中创建的线程设置一些超时,以便任务必须以10分钟结束,如果没有中止线程。

        我尝试了ThreadPool.QueueUserWorkItem,它甚至没有被调用,因为它是后台线程。最初Thread / Task.TaskFactory似乎可行,但为每个请求创建一个新线程似乎不是最好的做法。

        有人可以为第3步提供一些VB.NET代码/参考吗?特别是在一个单独的线程上调用外部Web服务,比如f​​ire和forget,并为该线程设置超时?

        由于

1 个答案:

答案 0 :(得分:1)

closeTimeout="04:01:00"
     openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00"
     allowCookies="false" bypassProxyOnLocal="false"
     hostNameComparisonMode="StrongWildcard"
     maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
     maxReceivedMessageSize="2147483647"
     messageEncoding="Text" textEncoding="utf-8"
     transferMode="StreamedResponse"
     useDefaultWebProxy="true"

在绑定属性中尝试此操作。它有助于增加超时时间并处理大数据(mb)