2010-04-14 110 views
1

我想弄清楚是否有可能实现一个.NET接口,其中的接口方法必须返回一些东西,你正在实现与异步WCF服务的特定接口方法?使用异步WCF服务实现接口?

希望你应该已经看到我遇到的问题。

这里的接口:

 
    public interface IDataService 
    { 
     IDataServiceResponse SendDataRequest(); 
    } 

IDataServiceResponse应该表示对我的异步WCF回调的结果,一个简单的容器。

这里就是我实现的接口方法,SendDataRequest()

 
     public IDataServiceResponse SendDataRequest() 
     { 
      InitializeDataServiceParameters(); 

      // Call the web service asynchronously, here.... 
      _client.BeginQueryJobs(_parameters, DataServiceQueryCallBack, _client); 

      // How do I return _dataServiceResponse, if I am calling the WCF service 
      // asynchronously?? 

      return _dataServiceResponse; 
     } 

而且回调方法签名的代码片段:

 
void DataServiceQueryCallBack(IAsyncResult result) 
{ 
    // ... implementation code 
} 

由于提前, 约翰

回答

2

显然我误解了最初的问题,即如何在客户端代理上使用异步方法。

答案是你的不是从异步方法调用返回。如果可以的话,它不会是异步的。如果您尝试在WCF客户端上封装异步方法,则应该封装一个回调而不是返回值:

public interface IDataService 
{ 
    void SendDataRequest(Action<IDataServiceResponse> callback); 
} 

public class DataService 
{ 
    public void SendDataRequest(Action<IDataServiceResponse> callback) 
    { 
     InitializeDataServiceParameters(); 
     _client.BeginQueryJobs(_parameters, DataServiceQueryCallBack, callback); 
    } 

    private void DataServiceQueryCallBack(IAsyncResult result) 
    { 
     var response = _client.EndQueryJobs(ar); 
     // Convert the actual WCF response into your custom interface 
     var dataServiceResponse = TranslateResponse(response); 
     Action<IDataServiceResponse> callback = 
      (Action<IDataServiceResponse>)result.AsyncState; 
     if (callback != null) 
      callback(dataServiceResponse); 
    } 
} 
+0

太棒了!非常感谢您的协助。 – 2010-04-14 17:44:04