【问题标题】:Calling external web service on different thread from web service在与 Web 服务不同的线程上调用外部 Web 服务
【发布时间】:2012-04-30 09:25:37
【问题描述】:

这是当前功能:

  1. 我的网站同步调用我的 ASP.NET Web 服务。
  2. 我的 Web 服务在数据库中创建了一条记录。
  3. 我的网络服务立即将新记录 ID 返回到网站。
  4. 我的网站向用户显示该记录 ID。

这一直运行良好。我必须添加一个功能,以便在第 2 步之后,我的 Web 服务将调用 1 到 6 个(取决于条件)外部 Web 服务。所以它看起来像这样:

  1. 我的网站同步调用我的 ASP.NET Web 服务。
  2. 我的 Web 服务在数据库中创建了一条记录。
  3. 我的 Web 服务调用外部 Web 服务。合并结果并保存在数据库中。
  4. 我的网络服务向网站返回新的记录 ID。
  5. 我的网站向用户显示该记录 ID。

由于这项新功能,现在网站请求可能需要 10 分钟。所以这就是我想要实现新功能的方式。

  1. 我的网站同步调用我的 ASP.NET Web 服务。
  2. 我的 Web 服务在数据库中创建了一条记录。
  3. 我的 Web 服务创建一个新线程并调用该线程上的一个方法(即发即弃)。此方法将调用外部 Web 服务,合并结果并保存在数据库中。由于这将在另一个线程上,执行将在完成第 3 步之前立即转到第 4 步。
  4. 我的网络服务立即将新记录 ID 返回到网站。
  5. 我的网站向用户显示该记录 ID。

另外,我想为第 3 步中创建的线程设置一些超时,以便任务必须在假设 10 分钟内结束,如果没有中止线程。

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

有人可以为第 3 步提供一些 VB.NET 代码/参考吗?专门在单独的线程上调用外部 Web 服务,例如触发并忘记并为该线程设置超时?

谢谢

【问题讨论】:

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


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多