Получение ответа от асинхронного вызова объекта Castle Wcf
Скажем, у меня есть такой звонок:
_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);
Но жалуется ли на неоднозначный звонок?
Есть указатели?
1 ответ
Крейг Нойвирт ответил на это: http://groups.google.com/group/castle-project-users/browse_thread/thread/f440dbd05e60484f
Я думаю, вы можете быть немного смущены нормальным асинхронным шаблоном C#. Он всегда включает пару начальных / конечных вызовов.
WCF Facility поддерживает 2 модели обратного вызова, которые определяются двумя последними аргументами вашего BeginWcfCall
2 варианта: 1) Действие>, состояние 2) AsyncCallback, состояние
Вариант 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
});
Как вы можете видеть, для первого требуется ссылка на прокси _actService для вызова end. Первый - это удобный метод, которого нет.
_actService.BeginWcfCall(x => x.GetAct(new GetActRequest
{
ActName =
saveScheduleSlotRequest.ScheduleSlot.ActProxy.Name
}), (IWcfAsyncCall<GetActResponse> result) =>
{
var response = result.End();
// Do something with the response
});
Выбор того, какой подход полностью зависит от ваших предпочтений стандартного асинхронного шаблона C#.