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

这是目前的功能:

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

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

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

    我尝试过ThreadPool.QueueUserWorkItem,它甚至不会被调用,因为它是后台线程。 最初线程/ Task.TaskFactory似乎是可行的,但为每个请求创建一个新线程似乎并不是最佳实践。

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

    谢谢


    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)

    链接地址: http://www.djcxy.com/p/12925.html

    上一篇: Calling external web service on different thread from web service

    下一篇: How can I limit Parallel.ForEach?