从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#标准异步模式的偏好 我认为,您必须明确指定
结果的类型