2012-04-18 57 views
0

调用不同的线程外部Web服务这是当前功能:从Web服务

  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服务创建一个新线程并在该线程上调用一个方法(fire and forget)。此方法将调用外部Web服务,合并结果并保存在数据库中。由于这将在另一个线程上,执行将在完成步骤3之前立即转到步骤4.
  4. 我的Web服务立即向网站返回新记录ID。
  5. 我的网站向用户显示该记录ID。

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

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

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

感谢

+0

你有什么尝试?创建一个新的线程已经有很好的文档记录,并有大量代码示例。你有没有尝试过某些东西,并得到错误,或者... http:// mattgemmell。COM/2008/12/08 /什么具备的,你试了/ – David 2012-04-18 21:33:38

回答

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)