代码之家  ›  专栏  ›  技术社区  ›  Ryan O'Neill

有没有办法获得异步wcf调用的错误反馈?

  •  0
  • Ryan O'Neill  · 技术社区  · 16 年前

    我有一个wcf服务,它在同步(阻塞)模式下100%工作,现在我需要重新编写一个调用,以便它使用异步模式。

    该服务使用身份验证并执行从客户端到服务器的分块文件传输,因此我已将其重新处理为使用“begin”异步前缀来启动调用。

    现在,我通过故意损坏用户凭据来测试错误,这会导致对它试图传输的文件块的每个部分的调用超时,这需要很长时间。问题是,我没有得到任何错误反馈,也看不到如果异步调用失败如何得到任何反馈。这会导致一些非常大的文件根本无法上载,但客户端不知道,因为没有抛出异常。

    我选中了调试->异常->所有CLR异常,以查看是否有任何异常正在被吞噬,但仍然没有任何异常。

    总之,如何从wcf中的异步调用获得错误反馈?

    提前谢谢你,

    赖安

    1 回复  |  直到 16 年前
        1
  •  1
  •   Steven Robbins    16 年前

    服务器为您缓存异常,如果您为异步调用调用结束操作完成方法,它将引发发生的任何异常。

    private void go_Click(object sender, EventArgs e)
    {
        client.BeginDoMyStuff(myValue, new AsyncCallback(OnEndDoMyStuff), null);
    }
    
    public void OnEndDoMyStuff(IAsyncResult asyncResult)
    {
        this.Invoke(new MethodInvoker(delegate() { 
            // This will throw if we have had an error
            client.EndDoMyStuff(asyncResult);
        }));
    }