zoukankan      html  css  js  c++  java
  • WCF 入门 (18)

    前言

    感冒了呀。。。but 不忌油炸,不忌辛辣,o(∩_∩)o 。

    第18集 WCF服务应该抛出fault 异常 Throwing fault exceptions from a WCF service

    这集的中心意思是WCF服务如果有异常,应该throw出来fault exception,而不是简单的默认的.net 的异常。

    原因有两个:

    1. 一个未经处理的.net 异常会使当前的ServiceClient所在的channel进入faulted状态。然后当前的代理类就不能再用,需要重新create一个。但是fault exception不会。关于这个faulted state,可以看这里

    2. 普通的.net 异常和平台相关,只能被.net的客户端识别,如果客户端是java的,就不好玩了。这个有点像.net remoting。

    配置文件不变,是启用reliableSession的wsHttpBinding,Divide做如下改动:

        public class CalculatorService : ICalculatorService
        {
            public double Divide(int numerator, int denominator)
            {
                if(denominator == 0) {
                    throw new FaultException(new FaultReason("denominator can't be 0"), new FaultCode("denominator is 0"));
                }
                return numerator / denominator;
            }
        }

    手动判断除数是否为0,如果为0, throw一个 FaultException。FaultException用来表示一个基于xml的和平台无关的SOAP,这样就确保了客户端的平台无关性。

    QQ截图20151031110239

    下面来试验一下效果:

    1. host起这个service

    QQ截图20151031110504

    2. 客户端代码不变,不过可以更新一下服务引用(试了不更新也没问题。)

    3. 先试验除数为0的情况

    QQ截图20151031110630

    其实前面抛出的FaultReason 和 FaultCode都是可以获取的。可以这么改:

                    lbRst.Text = ex.Code.Name + " - " + ex.Message;
                    lbRst.Text = ex.Code.Name + " - " + ex.Reason.ToString();

    4, 如果没有在服务端throw FaultException,并且客户端没有create 一个new proxy instance,由于channel进入了Faulted状态,将无法再使用同一个ServiceClient。现在我们已经改成了FaultException,再试验了一下。

    QQ截图20151031111254

    it works。

    如果在实际的coding中,应该是在服务端的代码上加个大的try-catch块,然后在catch块中throw出一个FaultException。

    Thank you.

  • 相关阅读:
    c# 如何制作RealPlayer 视频播放器
    【.Net】在C#中判断某个类是否实现了某个接口
    【EF】Entity Framework 6新特性:全局性地自定义Code First约定
    【EF】EF实现大批量数据库插入操作
    【数据库】各种主流 SQLServer 迁移到 MySQL 工具对比
    【Python】python学习之总结
    【Asp.Net Core】ASP.NET Core 2.0 + EF6 + Linux +MySql混搭
    【.Net】Visual Studio的调试技巧
    【转载】用C#编写一个简单的记事本
    【ADO.NET】ADO.NET知识点
  • 原文地址:https://www.cnblogs.com/sheldon-lou/p/4925177.html
Copyright © 2011-2022 走看看