我正在使用具有DoLookup()函数的C#编写ASP.NET Web服务。对于DoLookup()函数的每次调用,我需要我的代码执行两个单独的查询:一个到另一个远程站点的Web服务,另一个到本地数据库。在我可以编译结果并将它们作为对DoLookup方法的响应返回之前,两个查询都必须完成。我正在处理的问题是,我想尽可能提高效率,无论是在Web服务器上的响应时间和资源使用情况。我们预计每小时可以查询数千条查询。下面是我到目前为止粗略类似C#概述:使用多个长时间运行操作优化ASMX Web服务
public class SomeService : System.Web.Services.WebService
{
public SomeResponse DoLookup()
{
// Do the lookup at the remote web service and get the response
WebResponse wr = RemoteProvider.DoRemoteLookup();
// Do the lookup at the local database and get the response
DBResponse dbr = DoDatabaseLookup();
SomeResponse resp = new SomeResponse(wr, dbr);
return resp;
}
}
上面的代码做的一切顺序和伟大工程,但现在我想使它更具可扩展性。我知道我可以异步调用DoRemoteLookup()函数(RemoteProvider有BeginRemoteLookup/EndRemoteLookup方法),也可以使用BeginExecuteNonQuery/EndExecuteNonQuery方法异步执行数据库查找。
我的问题(最后)是这样的:我如何同时在单独的线程上同时触发远程Web服务查找和数据库查找,并确保它们在返回响应之前都完成了?
我想在单独的线程上执行这两个请求的原因是它们都可能有很长的响应时间(1或2秒),我想释放Web服务器的资源以处理其他请求正在等待回应。另外需要注意的是 - 我的远程Web服务查询目前是异步运行的,我只是不想让上面的示例太混乱。我正在努力的是让远程服务查找和数据库查找同时开始,并确定它们何时完成。
感谢您的任何建议。
你有线程服务的线程工作吗?在网上线程任何东西是非常有限的.net平台.. – 2009-09-10 21:32:43
@Charles康韦:你读过下面的答案吗?你在说什么,“有限”? – 2009-09-12 16:29:29