Вопрос

Скажи, что мне так звонит:

 _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);

Но это жалуется на неоднозначный звонок?

Есть указатели?

Это было полезно?

Решение

Крейг Нойвирт ответил: http://groups.google.com/group/castle-project-users/browse_thread/thread/f440dbd05e60484f

Я думаю, что вы можете быть немного смущены в обычном асинхронном рисунке C#. Это всегда включает в себя пару начинающих/конечных вызовов.

Модели обратного вызова WCF Facilit

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, чтобы позвонить в конце. Первый - это удобный метод, который нет.

 _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#.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top