【问题标题】:WCF Async Client calling WCF Async ServiceWCF 异步客户端调用 WCF 异步服务
【发布时间】:2012-10-03 21:04:11
【问题描述】:

我有一个轻型客户端应用程序,它使异步 WCF 调用 IIS 主机 WCF 服务。然后托管服务充当客户端,对另一个外部服务进行 SOAP 调用,做一些工作然后将结果返回给客户端。

客户端 >> WCF IIS 服务 >> SOAP 服务

我花了很多时间,确保 Client > WCF IIS 服务 是多线程和异步的,却发现它从 WCF IIS 服务 >> SOAP 服务中同步成为瓶颈.

有没有办法让客户端异步调用 WCF IIS 服务,进而将异步全部发送给 SOAP 服务,然后将结果返回给客户端?

我现在有点不知所措,感谢任何帮助。

【问题讨论】:

    标签: .net wcf asynchronous


    【解决方案1】:

    是的,如果我理解正确,您可能只需要在 WCF 服务器 OperationContract 中设置 AsyncPattern = true,然后使用 BeginXXX 和 EndXXX 方法实现每个 WCF 服务器调用。

    如果您目前同步实现了 WCF 服务器调用,则首先应该能够在同步方法上使用 BeginInvoke,但显然最好使它们完全异步。

    【讨论】:

      【解决方案2】:

      我无法控制 SOAP Java 服务,我可以将服务引用上的配置设置为异步运行。如果我要使用 BeginXXX 和 EndXXX 方法,我将如何在 WCF 方法调用中运行结果?

      public class AddService : IAddService
      {
          // SOAP Java service reference
          ResultServiceClient proxy = new ResultServiceClient();
      
          public int AddNumbers(int x, int y)
          {
      
              proxy.BeginGetResult(x, y, new AsyncCallback(OnEndAdd), null);
      
              /// how to return a result here.??????
              return result;
          }
      
          void OnEndAdd(IAsyncResult result)
          {
              int result = proxy.EndGetResult(result);
          }
      }
      

      【讨论】:

      • 您好,如果您使合约异步并向 IAddService 添加方法“IAsyncResult BeginAddNumbers(int x, int y, AsyncCallback callback, object state)”和“int EndAddNumbers(IAsyncResult)”,则只有 End 方法必须返回结果。然后,您可以通过调用代理来实现这两种方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多