积极答复者
silverlight 条用wcf 的异常怎么捕获?

问题
答案
-
内蒙小菜 写: 用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或其他方式把异常传到服务器,以后用来查看
全部回复
-
厄..我是新手..
但我实在也是在用WCF和Silverlight作小玩意...
要调试的话至少我这里一定是到代理里面去的.
因为Silverlight调试是本地的调试,如果你想看远程发生了什么,那就要在那个svc文件里面设断点.如果这个错误是在客户端的代理里面出的错,并且是BeginOpenasync有了错,那就说明根本没有连接上远端WCF服务,这样的情况一定是客户端的连接Endpoint设定有问题.
如果在你执行函数的代理里面出了错,那么你就应该到远端捕获错误,不知道你的WCF是不是在那个Silverlight项目里?
如果在的话就直接在WCF服务设断点,然后再Endpoint里面绑定到Visual Studio生成的那个Development server的端口上就可以调试了~
-
内蒙小菜 写: 用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或其他方式把异常传到服务器,以后用来查看
-
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)