• WCF 入门(15)


    前言

    度过了一个阳光明媚的周末。

    一个阴霾的周日夜晚。

    第15集 WCF里面的异常处理(1)  Exception handling in WCF

    大致看了一下,这个WCF视频里面总共有6集,这个是第一集,对WCF的异常做一个大致的入门介绍。

    ① 新建一个Demo, 命名为CalculatorService,里面只要一个OperationContract, Divide,如下。

        public class CalculatorService : ICalculatorService
        {
            public double Divide(int numerator, int denominator)
            {
                return numerator / denominator;
            }
        }

    这里,我们默认不做任何异常处理,直接把他host起来。

    ② 新建一个aspx的Client来测试这个Service。代码也很简单,外加不加任何异常处理。

        protected void btnCalc_Click(object sender, EventArgs e)
        {
            var client = new CalculatorServiceClient();
            lbMsg.Text = client.Divide(
                int.Parse(tbNumerator.Text.Trim()),
                int.Parse(tbDenominator.Text.Trim())
                ).ToString();
        }

    QQ截图20151018203545

    分别在两个textbox里面输入被除数和除数,点计算按钮,右边显示结果。

    ③ 下面来测试一下如果除数为0,得到如下结果。

    QQ截图20151018204031

    貌似然并软,因为Error Message上看不到任何和除0有关的异常信息。客户端不晓得自己哪里错了。

    这个是WCF的默认设置,出于系统安全性的考虑,服务端默认不会把Error Message 序列化为xml内容传给客户端,而是报了一个Common的WCF Fault Error。

    因为如果客户端轻易的就知道了服务器上的internal error message,要hack就相对容易了一些。

    但是出于调试的,我们有时候需要这个详细的错误信息内容。

    ④ 有两种方法可以让客户端知道具体的错误内容。

    1. 修改配置文件 (推荐这种,因为改配置文件不需要重新编译Source Code)

          <serviceBehaviors>
            <behavior name="">
              <serviceMetadata httpGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
          </serviceBehaviors>

    如上,在ServiceDebug节点中增加includeExceptionDetailInFaults, 赋值为true。

    2. 给 Class加特性,如下。

        [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
        public class CalculatorService : ICalculatorService
        {
            public double Divide(int numerator, int denominator)
            {
                return numerator / denominator;
            }
        }

    我们给CalculatorService加了ServiceBehavior特性,并且给IncludeExceptionDetailInFaults 属性赋值 true。

    ⑤ 重新run Host, 再测试一次。

    QQ截图20151018211316

    这下就能看到除0错误了。

    Thank you。

  • 相关阅读:
    linux基础练习题(3)
    linux基础练习题(2)
    linux基础练习题(1)
    编辑器 vim
    Linux 命令总结
    Sublime Text 3 快捷键总结(拿走)
    Linux 主要目录速查表
    javaScript中的querySelector()与querySelectorAll()的区别
    javaScript定时器
    js基本类型和字符串的具体应用
  • 原文地址:https://www.cnblogs.com/sheldon-lou/p/4890322.html
Copyright © 2020-2023  润新知