0

这是当前的功能:

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

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

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

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

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

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

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

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

谢谢

4

1 回答 1

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)

于 2012-04-19T06:48:50.230 回答