异步Web服务线程限制C#

时间:2011-12-20 14:42:33

标签: c# asp.net web-services

我们正在开发一个应用程序,其中UI调用服务(WCF)层,驻留在服务层内的组件异步调用外部Web服务。例如:UI发送表示通过上传文件调用WCF层,如果文件有1000个条目,则当前我们在循环中异步调用外部服务(BeginxxxMethod)1000次以进行响应。这是正确的方式吗?第二个问题:可以进行的最大异步连接数是多少?我们的技术是ASP.NEt和C#4.0。

3 个答案:

答案 0 :(得分:1)

两个建议:

  • 如果您控制Web服务API,请添加另一种方法,该方法允许您传递所有1000个参数并返回所有结果。这很粗俗与健谈,所以你只能经历一次跨过程的痛苦。
  • 如果您不控制Web服务API,请提供一个同步进行n次远程调用的包装器,然后异步调用此包装器n次。四处游戏,直到找到异步呼叫次数与每次异步呼叫的连续远程呼叫次数之间的最佳平衡。

答案 1 :(得分:1)

  

这是正确的方法吗?

异步调用通常是完成大批量作业的最佳方法。我觉得这种方法看起来很好看。作为开发人员,通常我们的工作是看到切割新线程的位置不再优化响应时间。 Myles提到在服务周围使用包装器。我经常在一次调用1000个调用时这样做...调用几千个异步调用实际上会损害性能(在我的应用程序中),所以我创建了一次将调用分组几百个(异步)的功能,直到所有x - 完成了几千个电话。这给了我两全其美......我能够立刻找到异步电话的点数给我最好的表现并从那里开始。

就最大线程而言,它取决于资源,但这里有link解释默认值...我会在下面发布以方便

 1023 in Framework 4.0 (32-bit environment)
 32768 in Framework 4.0 (64-bit environment)
 250 per core in Framework 3.5
 25 per core in Framework 2.0

答案 2 :(得分:0)

我们通过实现任务并行库解决了这个问题。 下面是伪代码。

  1. 将文件内容读入通用列表。
  2. 使用Parallel来处理每个请求,并根据服务器中的处理器数量设置MaxDOP(并行度)以处理请求。
  3. 由于