2012-10-13 274 views
2

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

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

我花了很多时间,确保客户> WCF IIS服务是多线程和Asyncronous,才发现它从Syncronously瓶颈WCF IIS服务>> SOAP服务

有没有一种方法,使客户端异步调用的WCF IIS服务,这反过来又使异步承滴盘的SOAP服务,然后把结果返回到客户端?

类博格尔斯我的脑海里,现在,知道的任何帮助。

回答

0

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

如果您目前有实现同步,你就应该能够在第一的同步方法使用的BeginInvoke的WCF服务器调用,虽然不如让他们完全异步明显。

+0

感谢,我发布了一个代码响应。 – mflair2000

0

我没有任何的SOAP Java服务的控制,我可以设置对服务的参考配置Asyncronously运行。如果我要使用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); 
    } 
} 
+0

嗨,如果你让合同异步并向IAddService添加方法“IAsyncResult BeginAddNumbers(int x,int y,AsyncCallback callback,object state)”和“int EndAddNumbers(IAsyncResult)”,只有End方法必须返回结果。然后,您可以通过调用代理来实现这两种方法。 –