博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF入门(九)——未处理异常
阅读量:6115 次
发布时间:2019-06-21

本文共 1102 字,大约阅读时间需要 3 分钟。

对于客户端来说,远程调用出现异常需要手动捕获,否则将导致程序异常终止。

对于服务器端来说,客户调用是出现的异常会往上抛,但是会被WCF框架给捕获,不会导致服务器崩溃,可以不手动捕获。例如,如下服务函数被调用时并不会导致服务器崩溃:

    public class Service1 : IService1

    {
        public void ErrorTest()
        {
            throw new InvalidOperationException("
异常测试");
        }
    }

但值得注意的是:服务被设置为PerSession模式或者Single模式,服务异常还会导致服务对象被释放而终止服务这个是在网上看到的说明,但我自己试的时候没有挂,也没有看到MSDN上哪儿有写,待后续确认后再更新

但是,WCF框架也仅仅只捕获服务接口所抛出的异常,对于其它的异常,则和传统方式一致,例如,如下代码就会导致WCF服务器崩溃,需要我们注意。

    public class Service1 : IService1

    {
        public void ErrorTest()
        {
            ThreadPool.QueueUserWorkItem(_ =>
                {
                    throw new InvalidOperationException("
异常测试");
                });
        }
    }

另外,被WCF框架捕获的异常中,有的可能是确实需要传递给客户端的,有的则可能是我们代码中的bug。因此,往往需要我们对其记录一下,这里仍可以通过上一章中介绍的IErrorHandler接口实现,在HandleError函数中记录异常信息,以便后续分析。

    public class ErrorHandler : IErrorHandler

    {
        public bool HandleError(Exception error)
        {
            Debug.WriteLine("Got error: " + error.Message);
            return false;
        }
        public void ProvideFault(Exception error, MessageVersion version, ref Message fault)
        {
            var ex = new FaultException(error.Message);
            var mf = ex.CreateMessageFault();
            fault = Message.CreateMessage(version, mf, ex.Action);
        }
    }

除了这个手动记录的方法外,在文章中介绍了一个配置日志实现记录异常的方法,可以参考一下。

转载地址:http://dxvka.baihongyu.com/

你可能感兴趣的文章
黄聪:VMware安装Ubuntu10.10【图解】转
查看>>
Centos 6.x 升级openssh版本
查看>>
公式推♂倒题
查看>>
vue实现点击展开,点击收起
查看>>
如何使frame能居中显示
查看>>
第k小数
查看>>
构建之法阅读笔记三
查看>>
写给对前途迷茫的朋友:五句话定会改变你的人生
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>