2011-01-12 48 views
1

说我有像这样的电话:从城堡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); 

但它抱怨一个模棱两可的电话吗?

任何指针?

+0

你必须明确指定`result`的类型我认为 – 2011-01-12 12:29:11

回答

0

克雷格Neuwirt的回答是:http://groups.google.com/group/castle-project-users/browse_thread/thread/f440dbd05e60484f

我想你可能会有点困惑正常的C#异步模式。 它始终涉及一对开始/结束调用。

这是由过去的2个参数的您BeginWcfCall

的2个选项是 1)动作>,状态 2)的AsyncCallback,状态

选项1是确定的WCF基金支持2回调模型标准异步模式,看起来像这样

 _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#标准异步模式的偏好。