【问题标题】:Getting response from Castle Wcf facility async call从 Castle Wcf 设施异步调用获取响应
【发布时间】:2011-01-12 11:05:51
【问题描述】:

假设我有这样的电话:

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

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

任何指针?

【问题讨论】:

  • 我认为你必须明确指定result的类型

标签: wcf castle-windsor facilities


【解决方案1】:

Craig Neuwirt 回答了这个问题:http://groups.google.com/group/castle-project-users/browse_thread/thread/f440dbd05e60484f

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

WCF 工具支持 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#standard 异步模式的偏好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多