异步调用的函数是VOID类型,没有返回值。

解决方案 »

  1.   

    webservice放一个out参数,往这几年放返回值。
      

  2.   

    你是自己用BeginInvoke还是用的VS自动生成的异步方法?
    如果是BeginInvoke,在你调用EndInvoke时没抛异常就可以认为成功了
    如果是自动生成的(本质上是基于上一种的封装处理),XXX在Completed事件中,e.Error表示的就是异常,为空就可以表示调用成功
      

  3.   

    webservic是对方公司开发的,不太好要求人家加输出参数。
    webservice异步调用,好像是调用不成功,调用方好像是成功调用的;不像同步调用,调用不成功,就会显示不成功。
      

  4.   

    异步的方法是对方公开的方法。对方公开的方法中同时有两个:同步方法和异步方法,另外还有一个XXXCompleted,类型是XXXEventHandler,不知道怎么使用,多谢指点!
      

  5.   

    “e.Error表示的就是异常,为空就可以表示调用成功”中的e不知道是什么类型?
      

  6.   

    从你上面的描述,你说的XXXCompleted和XXXEventHandler是VS自动帮你生成的,实际上对方只提供了那个同步方法
    在你引用服务的时候,估计你把“生成调用的方法”勾上了
    判断的方法就是处理XXXCompleted事件
    using(var wsClient = new 客户端())
    {
             //一定要先注册事件,+=后按Tab键自动帮你插入,然后再生成方法
             wsClient.XXXCompleted += 调用完成的回调方法;   
             wsClient.XXXAsync();
    }调用完成的回调方法(object sender, XXXCompletedEventArgs e)
    {
             if(e.Error != null)
             {
                       出错了!      //注意这里是异步回调的,什么时候完成(包括超时)什么时候才会调用
             }
    }
      

  7.   

    多谢指点!
    好像公开的函数有返回值,才会有XXXCompletedEventArgs,公开的函数如果是void就不会有XXXCompletedEventArgs。
      

  8.   

    都有的,你用Tab键快速注册事件时,上面那个XXXCompletedEventHandler ,你右键 转到定义 去看下就知道它的事件参数的类型了
      

  9.   

    多谢,我知道了,应该是System.ComponentModel.AsyncCompletedEventArgs