通过多次调用另一个Web服务Web方法实现Web方法的最佳方法

时间:2014-12-21 00:21:01

标签: .net multithreading wcf asynchronous

有人可以建议实施以下方案的最佳方式。

  1. 我有两个Web服务,websvc1和websvc2,包含方法,websvc1.webmethod1()和websvc2.webmethod2()
  2. websvc2.webmethod2()需要在for循环中调用websvc1.webmethod1()大约500次。
  3. 来自websvc2.webmethod()的调用不应等待来自websvc1.webmthod1()的响应
  4. websvc1.webmethod1()还注册了几个将被触发近60k次的事件,这应该是异步完成的。
  5. 顺便说一下,这两个是WCF服务。

1 个答案:

答案 0 :(得分:0)

取决于。

websvc2.webmethod2()是否关心对websvc1.webmethod1()的调用是否失败?如果是这样,那么我建议在循环中进行500次调用必须同步完成,因为调用者需要知道调用是否失败。这可以用多线程完成,但是没有多大意义,因为这里的瓶颈不会是你调用websvc1.webmethod1()的速度有多快,但是websvc1.webmethod1()处理调用的速度有多快。

如果没有,那么在我看来,建议您将websvc1.webmethod1()作为单向调用,并使用排队绑定。

为此,请将服务操作合同标记为:

[ServiceContract] 
interface IWebSvc1 
{ 
    [OperationContract(IsOneWay = true)] 
    void WebMethod1() 
}

并尽可能使用内置netMsmqBinding来防止服务泛滥。如果您不使用排队绑定,您仍然可以通过tcp / http实现一种方式,但由于可用性,您可能会遇到更高的失败呼叫风险。如果在wcf中使用单向,则调用者将不知道服务上的失败。