一次多个Web服务调用

p

我们在C#Web应用程序中连接了多个(约15-20个)第三方Web服务。我们正在尝试找到使用多线程或异步同时调用多个Web服务(2-5)的最佳方法。

最好的方法是什么?

  • 多线程
  • 异步通话

它需要具备以下能力:

  • 连接到Web服务A
  • 发送请求,
  • 连接到Web服务B
  • 发送请求
  • 连接到Web服务C
  • 发送请求
  • 等等...

..所有等待WS A,B,C等的响应时...

我知道我需要使用IAyncResult,但是我已经看到了一些示例,有些使用了MultiThreading,有些则没有。最好的方法是什么?

德鲁·马什

您没有在问题中提到它,但是已经用WCF标签标记了该问题,因此我假设您正在尝试使用WCF客户端代理模型进行这些调用。如果不是这种情况,请说明您使用的哪种客户端技术,我可以更改答案。

首先,我强烈建议您阅读MSDN上的以下文档:如何:异步调用WCF服务操作

首先,您要做的是使用生成WCF客户端代理类SvcUtil.exe,但指定一个附加标志/async(或简单地/a),该标志将生成异步编程模型(APM)方法签名。一旦生成了这些客户端代理,就可以像调用其他APM方法一样简单地调用它们,并提供一个回调,一旦响应可用,该回调将被调用。

使用基于APM的WCF签名将使传出和挂起的网络I / O完全异步,这将释放您的“主”线程来进行您需要同时进行的15-20个调用。同样,当网络调用未完成时,不会浪费任何CPU线程。

现在,如果您使用的是.NET 3.5,则必须使用某种同步原语等待并在每个回调完成后发出信号。不幸的是,3.5中也没有CountdownEvent,但是您可以使用Interlocked::Decrement它进行倒计时,然后ManualResetEventSlim在达到0时发出信号(或找到提供此功能的第三方库)。如果您使用的是.NET 4.0,则可以将APM模型与基于任务的异步编程(TAP)模型结合起来,然后将其全部TaskFactory::FromAsyncTasks送到a中List<Task>,然后使用Task::WaitAll它们来等待它们完成之后再继续操作。最后,如果您使用的是.NET 4.5,甚至可以将其与C#的async关键字和Task::WhenAll 相反,您可以节省大量的手动TPL延续逻辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何让多个指令在一个服务中仅调用一次相同的诺言?

来自分类Dev

如何仅使用Android服务一次调用函数?

来自分类常见问题

使用多个线程仅调用一次方法

来自分类常见问题

在ReactJs中通过一次onClick调用多个功能

来自分类Dev

在一次调用C ++ 11中启动多个线程

来自分类Dev

为多个属性调用一次函数

来自分类Dev

多个意图,但广播接收方仅被调用一次

来自分类Dev

一次调用即可更新多个路径

来自分类Dev

在ReactJs中通过一次onClick调用多个功能

来自分类Dev

一次调用Parse.com多个计数查询

来自分类Dev

是否可以一次调用多个方法或对象?

来自分类Dev

多个意图,但广播接收方仅被调用一次

来自分类Dev

一次编译多个JSON文件的调用

来自分类Dev

角度向多个模块一次添加服务

来自分类Dev

一次发送多个文件到服务器

来自分类Dev

对WebRequest的非常简单的调用以某种方式调用Web服务在某种程度上每次都进行两次调用,一次没有凭据,一次带有?

来自分类Dev

第一次在Blazor服务器端应用程序中调用Web API无效

来自分类Dev

如何在Web服务器运行时每2分钟调用一次函数?

来自分类Dev

一次多个XMLHttpRequest

来自分类Dev

一次多个XMLHttpRequest

来自分类Dev

一次单击一次使用android和wamp服务器时,发生了多个行插入

来自分类Dev

Web Worker 函数为一次调用返回两次响应

来自分类Dev

如何在JAX-RS Jersey Restful Web服务中通过一次调用获取不同类型的JSON对象

来自分类Dev

Azure服务总线:多个客户端,但一次仅处理一条消息

来自分类Dev

测试Angular控制器使用Jasmine一次准确地调用服务功能

来自分类Dev

仅调用一次/将$ http中的数据缓存到AngularJS服务中

来自分类Dev

每5秒调用一次服务器-返回堆栈溢出错误

来自分类Dev

IBM Worklight:请求每<1秒调用一次Worklight服务器

来自分类Dev

测试Angular控制器使用Jasmine一次准确地调用服务功能

Related 相关文章

  1. 1

    如何让多个指令在一个服务中仅调用一次相同的诺言?

  2. 2

    如何仅使用Android服务一次调用函数?

  3. 3

    使用多个线程仅调用一次方法

  4. 4

    在ReactJs中通过一次onClick调用多个功能

  5. 5

    在一次调用C ++ 11中启动多个线程

  6. 6

    为多个属性调用一次函数

  7. 7

    多个意图,但广播接收方仅被调用一次

  8. 8

    一次调用即可更新多个路径

  9. 9

    在ReactJs中通过一次onClick调用多个功能

  10. 10

    一次调用Parse.com多个计数查询

  11. 11

    是否可以一次调用多个方法或对象?

  12. 12

    多个意图,但广播接收方仅被调用一次

  13. 13

    一次编译多个JSON文件的调用

  14. 14

    角度向多个模块一次添加服务

  15. 15

    一次发送多个文件到服务器

  16. 16

    对WebRequest的非常简单的调用以某种方式调用Web服务在某种程度上每次都进行两次调用,一次没有凭据,一次带有?

  17. 17

    第一次在Blazor服务器端应用程序中调用Web API无效

  18. 18

    如何在Web服务器运行时每2分钟调用一次函数?

  19. 19

    一次多个XMLHttpRequest

  20. 20

    一次多个XMLHttpRequest

  21. 21

    一次单击一次使用android和wamp服务器时,发生了多个行插入

  22. 22

    Web Worker 函数为一次调用返回两次响应

  23. 23

    如何在JAX-RS Jersey Restful Web服务中通过一次调用获取不同类型的JSON对象

  24. 24

    Azure服务总线:多个客户端,但一次仅处理一条消息

  25. 25

    测试Angular控制器使用Jasmine一次准确地调用服务功能

  26. 26

    仅调用一次/将$ http中的数据缓存到AngularJS服务中

  27. 27

    每5秒调用一次服务器-返回堆栈溢出错误

  28. 28

    IBM Worklight:请求每<1秒调用一次Worklight服务器

  29. 29

    测试Angular控制器使用Jasmine一次准确地调用服务功能

热门标签

归档