C# 多次调用webservice

C# 多次调用webservice,c#,asp.net,web-services,C#,Asp.net,Web Services,在一个数据库中,我有30000个用户,每个用户都有一个指定的电话号码。对于每个电话号码,我将调用一个Web服务,它为用户提取一些信息。很多用户不在webservice中显示,所以我只接收null,但我不知道哪些用户,并且可以不时显示新用户。Web服务实时更新,因此每分钟都会有新的结果。 如果响应不为null,并且接收到的文件与上次接收到的文件不同,我将从接收到的XML文件创建一个PDF文档 webservice调用由计划任务启动,该任务使用以下伪代码启动.aspx站点: Foreach phon

在一个数据库中,我有30000个用户,每个用户都有一个指定的电话号码。对于每个电话号码,我将调用一个Web服务,它为用户提取一些信息。很多用户不在webservice中显示,所以我只接收null,但我不知道哪些用户,并且可以不时显示新用户。Web服务实时更新,因此每分钟都会有新的结果。 如果响应不为null,并且接收到的文件与上次接收到的文件不同,我将从接收到的XML文件创建一个PDF文档

webservice调用由计划任务启动,该任务使用以下伪代码启动.aspx站点:

Foreach phonenumber {
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("webservice/phonenumber");

using (StreamReader reader = new StreamReader(webResponse.GetResponseStream()))
    {
        makePdf();
    }
}
当然,问题是这个请求需要花费很长时间。对于3万用户来说,大约需要7个小时。我曾尝试查看异步webservice调用,但无法使任何东西正常工作。有人能给我指出正确的方向吗?如果可能的话,或者告诉我应该怎么做


谢谢

首先,您应该检查时间是在Web服务中还是在PDF创建中。如果它在webservice中,请检查是否缺少索引等。为了改进webserice,您可以同时获取多个电话号码。如果您的问题在于PDF创建,请找到改进PDF创建的方法。目前还不清楚您正在使用什么工具来创建pdf。

为什么您的服务不能实现一个方法来接受时间戳参数并返回自该时间戳以来更改的用户列表或数组。这样,您应该只能为这些用户发送请求。

您不能将web服务更改为接受多个电话号码并返回多个结果吗?您应该只同步一次数据,并将记录保存在数据库中。因为这是一次性的过程,所以它是否需要7小时左右并不重要。稍后,您应该只请求针对新添加或更新的用户的数据,这当然不会花费太多时间。他可能不知道用户是否已更新,因此需要检查他们,这是出于好奇,这将如何与类似Parallel.ForEach?感谢您的评论。我想我会和你们大多数人一起去,联系Web服务的创建者,看看他们有什么要说的……瓶颈是Web服务。这不是我自己的Web服务,因此我无法改进它。事实上,我创建的不是PDF,它只是一个新的XML,我使用StreamWriter和XmlSerializer从模式中创建。当用户点击PDF文件时,它是第一次动态创建的-我的坏!