从Castle Wcf facility异步调用获取响应

从Castle Wcf facility异步调用获取响应,wcf,castle-windsor,facilities,Wcf,Castle Windsor,Facilities,假设我有这样一个电话: _actService.BeginWcfCall(x => x.SaveAct(new SaveActRequest { Act = act

假设我有这样一个电话:

 _actService.BeginWcfCall(x => x.SaveAct(new SaveActRequest
                                                             {
                                                                 Act = act
                                                             }));
如何获得SaveAct的响应?如何设置回调以在操作完成时触发

我试过:

    _actService.BeginWcfCall(x => x.GetAct(new GetActRequest
                                                            {
                                                                ActName =
                                                                    saveScheduleSlotRequest.ScheduleSlot.ActProxy.Name
                                                            }), (result) =>
                                                                    {
                                                                        var async = (GetActResponse)result.AsyncState;

                                                                    }, _actService);
但它抱怨一个模棱两可的电话


有什么建议吗?

Craig Neuwirt回答说:

我认为您可能对正常的C#异步模式有点困惑。 它总是涉及一对Begin/End调用

WCF工具支持2个回调模型,该模型由BeginWcfCall的最后2个参数确定

这两个选项是 1) 行动>,状态 2) 异步回调,状态

选项1是标准的异步模式,如下所示

     _actService.BeginWcfCall(x => x.GetAct(new GetActRequest 
                                                            { 
                                                                ActName = 
                                                                    saveScheduleSlotRequest.ScheduleSlot.ActProxy.Name 
                                                            }), (IAsyncResult result) => 
                                                                    { 
                                                                        var response =  _actService.EndWcfCall<GetActResponse>(result); 
                                                                        // Do something with the response 
                                                                    }); 
\u actService.BeginWcfCall(x=>x.GetAct(新的GetActRequest
{ 
ActName=
saveScheduleSlotRequest.ScheduleSlot.ActProxy.Name
}),(IAsyncResult结果)=>
{ 
var响应=_actService.EndWcfCall(结果);
//对回应做点什么
}); 
如您所见,第一种方法需要对调用端的_actService代理的引用。第一种是一种方便的方法,它不需要

 _actService.BeginWcfCall(x => x.GetAct(new GetActRequest 
                                                            { 
                                                                ActName = 
                                                                    saveScheduleSlotRequest.ScheduleSlot.ActProxy.Name 
                                                            }), (IWcfAsyncCall<GetActResponse> result) => 
                                                                    { 
                                                                        var response =  result.End(); 
                                                                        // Do something with the response 
                                                                    }); 
\u actService.BeginWcfCall(x=>x.GetAct(新的GetActRequest
{ 
ActName=
saveScheduleSlotRequest.ScheduleSlot.ActProxy.Name
}),(IWCFancCall结果)=>
{ 
var response=result.End();
//对回应做点什么
}); 

选择哪种方法完全取决于您对c#标准异步模式的偏好

我认为,您必须明确指定
结果的类型