none
silverlight 条用wcf 的异常怎么捕获? RRS feed

  • 问题

  •  

    用silverlight调用wcf ,过程中如果有异常了 (例如wcf服务器无响应),怎么抓到这个异常...?

    调试状态时异常了 程序会断到生成的代理类里...。

    2008年12月23日 2:56

答案

  •  内蒙小菜 写:

     

    用silverlight调用wcf ,过程中如果有异常了 (例如wcf服务器无响应),怎么抓到这个异常...?

    调试状态时异常了 程序会断到生成的代理类里...。

     

    Silverlight要调试wcf异常跟原有写asp.net的方式不一样,尤其在程序发布之后.

    Silverlight只是相当于一个客户端,wcf相当于一个提供接口的Server端服务.

    所以Silverlight在接收wcf的时候本身只能有两种异常 1.wcf超时或无响应 2.Silverlight传入值通过wcf返回值错误.

    wcf写好最好先进行单元测试保证接口没问题,

    开发过程时silverlight调试wcf最好不要把webclient放在类构造函数中,放在LayoutRoot_Load 里面,

    发布后的Silverlight如果出现wcf异常,try后可以用httpget或其他方式把异常传到服务器,以后用来查看

    2008年12月24日 2:07
    版主

全部回复

  • 厄..我是新手..

    但我实在也是在用WCF和Silverlight作小玩意...

    要调试的话至少我这里一定是到代理里面去的.

    因为Silverlight调试是本地的调试,如果你想看远程发生了什么,那就要在那个svc文件里面设断点.如果这个错误是在客户端的代理里面出的错,并且是BeginOpenasync有了错,那就说明根本没有连接上远端WCF服务,这样的情况一定是客户端的连接Endpoint设定有问题.

    如果在你执行函数的代理里面出了错,那么你就应该到远端捕获错误,不知道你的WCF是不是在那个Silverlight项目里?

    如果在的话就直接在WCF服务设断点,然后再Endpoint里面绑定到Visual Studio生成的那个Development server的端口上就可以调试了~

    2008年12月23日 13:47
  •  内蒙小菜 写:

     

    用silverlight调用wcf ,过程中如果有异常了 (例如wcf服务器无响应),怎么抓到这个异常...?

    调试状态时异常了 程序会断到生成的代理类里...。

     

    Silverlight要调试wcf异常跟原有写asp.net的方式不一样,尤其在程序发布之后.

    Silverlight只是相当于一个客户端,wcf相当于一个提供接口的Server端服务.

    所以Silverlight在接收wcf的时候本身只能有两种异常 1.wcf超时或无响应 2.Silverlight传入值通过wcf返回值错误.

    wcf写好最好先进行单元测试保证接口没问题,

    开发过程时silverlight调试wcf最好不要把webclient放在类构造函数中,放在LayoutRoot_Load 里面,

    发布后的Silverlight如果出现wcf异常,try后可以用httpget或其他方式把异常传到服务器,以后用来查看

    2008年12月24日 2:07
    版主
  •  void btnGetClientIP_Click(object sender, RoutedEventArgs e)
            {
                CompanyService.CompanyClient client = new SilverlightTest.CompanyService.CompanyClient();
                client.GetClientIPCompleted += new EventHandler<SilverlightTest.CompanyService.GetClientIPCompletedEventArgs>(client_GetClientIPCompleted);
                client.GetClientIPAsync();
                client.CloseAsync();
            }
    
            void client_GetClientIPCompleted(object sender, SilverlightTest.CompanyService.GetClientIPCompletedEventArgs e)
            {
                try
                {
                    txtClientIP.Text = e.Result;
                }
                catch { }
            }

    sl调用都是异步的,在完成client_GetClientIPCompleted中try捕获,然后处理。这种异常其实都是一样的通信异常,communication异常,因为wcf和客户端可能跨平台,不能共享异常类型。

    当然了,你也可以自定义错误异常,这方面可以参看:WCF分布式开发步步为赢(15):错误契约(FaultContract)与异常处理(ExceptionHandle)

    2010年3月20日 4:33