2010-04-14 75 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