我试图找出是否可以实现.NET接口,其中接口方法必须返回一些内容并且您正在使用异步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 }
提前致谢, 约翰
答案 0 :(得分: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);
}
}