dever.cn中的异常处理

自己动手打造企业级短信平台(上) 作者:dever  (如需引用,请注明出处!)前言:本文只是探讨构造短信平台的思路,并不专注于讨论某种技术,文中所提到的技术细节如有疑问,请翻阅相关资料查找。在通讯发达的今天,短信已经成为人们交流的重要手段,与E-Mail、电话等传统交流方式相比,短信有着不可比拟的优势。越来越多的企业开始选择使用短信平台来进行企业宣传、行业应用、系统集成等等。当你决定构造一个企业的短信平台时,你面临着以下 阅读详情

回想起靠关键字或错误代码定义异常的ASP时代,现在JAVA和.net中的异常处理机制实在是进步的太多了。 

先定义一个异常源的struct

 public struct ErrorItem
 {
  public string UserIp ;//用户IP
  public string Page ;//错误发生的页面
  public string Resource ;//错误源
  public string ErrorInfo ;//错误信息
  public DateTime ErrorTime ;//错误发生的时间
 }

以下是一些我用到的主要异常处理方法: 

public static void setError(Exception e)
  {
   System.Web.HttpContext hc = System.Web.HttpContext.Current;

   // 将捕获的异常实例分解并处理
   ErrorItem ei = new ErrorItem();

   ei.ErrorInfo = e.Message;
   ei.Resource = e.Source;
   ei.Page = hc.Request.Path;
   ei.UserIp = hc.Request.UserHostAddress.ToString();
   ei.ErrorTime = DateTime.Now;
   
   saveError(ei,true); //调用错误处理函数
}


  public static void saveError(ErrorItem errItem,bool isView)
  {
   // 将错误信息写库供显示用
   System.Web.HttpContext hc = System.Web.HttpContext.Current;
   string strSql = "update error set ------------" 
   SqlHandle.ExecuteUpdateQuery(strSql)

   ErrorHandle eh = new ErrorHandle()
   // 判断日志文件是否存在,不存在则新建
   eh.isExistLog()
   // 将错误信息写入日志文件
   XmlElement xErrorElement = xmlDoc.CreateElement("error") ;

   eh.AddXmlAttribute(xErrorElement,"time",errItem.ErrorTime.ToString());
   eh.AddXmlAttribute(xErrorElement,"resource",errItem.Resource);
   eh.AddXmlAttribute(xErrorElement,"page",errItem.Page);
   eh.AddXmlAttribute(xErrorElement,"ip",errItem.UserIp);
   xErrorElement.InnerText = errItem.ErrorInfo ;
   xmlRoot.AppendChild(xErrorElement) ;

   if(isView)
   {
    hc.Response.Redirect( DeverClass.getRoot("ErrorHandle.aspx") );
   }
  }

// 用弹出窗口弹出错误信息并自动回退
  public static void popError(string strError)
  {
   System.Web.HttpContext hc = System.Web.HttpContext.Current;
   hc.Response.Write(" ");
  }

  // 用弹出窗口弹出错误信息,第二个参数为返回页面
  public static void popError(string strError,string strRePage)
  {
   System.Web.HttpContext hc = System.Web.HttpContext.Current;
   hc.Response.Write(" ");
  }

setError方法处理的是程序中try{}中捕获的错误,将异常实例的信息分解后交给saveError来处理。saveError方法处理这些异常的同时也处理一些自定义的异常。参数isView控制是否要将错误显示给用户。

popError处理一些用户操作上的错误,比如说登陆时输入错误等,此类错误不影响程序运行,只要弹出个小窗口提示一下就OK。


异常处理一个很重要的环节是记录日志,将异常写到库里比较方便,但存在一个致命弱点,就是它会使数据库变的很大且难以控制,所以一般不推荐,我采用的方法是,将异常写到库里,注意是update而不是insert。这样库里永远就只有最新发生的一条异常。这条异常主要是显示给用户看的。异常写库的同时也将异常写到日志文件中,我写在一个XML文件中,查询历史记录时可直接显示XML文件中的内容。 

在程序中捕获异常是控制程序正常运转的好办法,但并不能解决所有问题,因为我们不能把整个程序包在一个try块中,或者程序里到处是try块,这样都是低效的,明智的做法是预测可能发生的异常并捕获,对于一些预测不到的错误就交给系统来帮我们捕捉吧。

修改Global.asax.cs中的Application_Error方法,这个方法是在发生错误时系统自动调用的,当然对于try{}块中的错误它是不处理,因为它的错误处理优先级低于用户自定义异常处理。下面是我改写的该函数

protected void Application_Error(Object sender, EventArgs e)
  {
      if(System.Configuration.ConfigurationSettings.AppSettings["ErrorView"].Equals("ON"))
     {
         System.Web.HttpContext hc = System.Web.HttpContext.Current;
         // 自定义错误信息
         ErrorItem ei = new ErrorItem();

         ei.ErrorInfo = "未捕获的错误";
         ei.Resource = "未知";
         ei.Page = hc.Request.Path;
         ei.UserIp = hc.Request.UserHostAddress.ToString();
         ei.ErrorTime = DateTime.Now;
         ErrorHandle.saveError( ei,true );  //此处为出错处理
     }
 }

函数的处理根据你的需要来写。最好是在处理前加一个判断,因为有的时候我们并不希望它执行,比如说调试阶段。在web.config中加个开关值就OK了。


   

如果你觉得这样很麻烦,又或者你根本就不在意那些未捕获的异常,那好吧,有一些工作你还是应该做的。修改web.config文件。

    defaultRedirect = "Error.aspx" 
    mode="On"   
    />  

现在你的程序看起来就完美多了,再也不会出现令用户不快的黄底黑字了。

以上这些方法为便于大家理解,我写的都比较简单,一些处理函数也省去了,比如说在将错误信息写库时,一定要过滤,因为错误信息中可能会包含单引号。

Android17车载音频进阶之H2XML定制Module(一百七十七) 目的:理解H2XML如何把Module接口和Key定义转换为ARC可用的元数据,并通过Graph、GKV、CKV和TKV驱动AudioReach用例配置。H2XML根据带注解的C头文件生成XML元数据。ARC使用这些元数据配置Module、Graph和参数,ACDB保存对应的Graph定义与Calibration数据,运行时由GSL和AML按Key Vector查询数据。H2XML负责生成配置所需的元数据,不负责执行CAPI Module中的算法。fill:#333;important; 阅读详情

相关推荐

YOLO26算法皮革表面缺陷检测+训练好的模型+124张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[颜色(color), 切(cut), 折叠(fold), 胶水(glue), 好的(good), 戳(poke)] 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 68 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.7582** mAP50-95 | 0.4306 Precision | 0.6226 Recall | 0.6520 train/box_loss | 0.8731 train/cls_loss | 2.3543 val/box_loss | 1.3709 val/cls_loss | 3.9767 【训练过程分析】 从一开始的配置就定下了基调,训练配置包括了 yolo26n 模型、100 个 epoch,学习率初始设为 0.01,输入尺寸定为 640x640,批次大小为 24。这组配置在开始阶段表现得不错,模型刚开始训练时的 loss 降低得很快,这表明模型能够迅速从数据中吸收信息。但到了中后期,loss 曲线变得愈发平缓,从第 50 个 epoch 开始,即使我增加了学习率衰减的频率,仍然感到曲线在挣扎,像是陷入了平台期。这期间模型的收敛节奏明显减缓,似乎有些“停滞不前”的迹象。到了最后,模型确实收敛了,但在第 68 个 epoch 时 mAP50 获得了 0.7582 的值,这是一个不错的成绩,但与理想值相比仍有提升空间。... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

Mandrake Linux 10硬盘ISO安装(转)

采用以下安装方法将无须软驱、光驱,不解压、无需手工更换ISO文件,硬盘启动安装(图形界面) 1、用md5sums.exe filename.iso命令,验证ISO文件MD5码的正确性。并把4个ISO文件放到某个fat、fat32、ext2或ext3硬盘分区的根下。2、从http://www.linuxfans.org/nuke/modul...fo&did=2334,下载:MandrakeIS

天亮说晚安 7546

视频编码压缩11111

视频编码压缩11111

自己动手打造企业级短信平台(下)

看了上一篇文章,大家一定觉得我在吹牛,不就是一个发送短消息的小程序,也敢称企业级短信平台,呵呵,别着急,昨天的内容就好比万里长征的第一步,只有第一步走出去才会有以后的千千万万步,所以第一步要走好走扎实才行。费话就不多说了,马上开始今天的内容。昨天我们的目标很明确,就是做一个能发送短消息的小程序,而今天的需求就更复杂一些,我常说具体问题具体分析,但这次我不能再这样了,因为需求是多种多样的,为了不使本

天亮说晚安 6268

储能变流器(Power Control System——PCS)设计原理

储能变流器(Power Control System——PCS)可控制蓄电池的充电和放电过程,进行交直流的变换,在无电网情况下可以直接为交流负荷供电。PCS 由 DC/AC 双向变流器、控制单元等构成。PCS 控制器通过通讯接收后台控制指令,根据功率指令的符号及大小控制变流器对电池进行充电或放电,实现对电网有功功率及无功功率的调节。 PCS 控制器通过 CAN 接口与 BMS 通讯,获取电池组状态信息,可实现对电池的保护性充放电,确保电池运行安全。   储能变流器(PCS)可控制蓄电池的充电和放电过程,进

Zhouengineer的博客 5万+

深入CRSF协议数据包:手撕STM32代码,教你像调试串口一样分析ELRS遥控数据流

本文深入解析CRSF协议数据包,通过手撕STM32代码,教你如何像调试串口一样分析ELRS遥控数据流。从硬件准备到数据包捕获状态机设计,再到高级数据分析技巧和实战应用,全面覆盖CRSF协议的解析与优化,帮助开发者构建稳定可靠的通信系统。

weixin_29194693的博客 337

ASP.NET中常用的JavaScript操作

1.为button控件添加确认功能要想为服务器控件添加客户端的事件,需要用到Attributes属性。Attributes属性是所有的服务器控件都有的一个属性,它用来为最终生成的HTML添加自定义的一些标记。假设Web Form上有一个保存按钮btnSave,希望在用户点此按钮时提示用户是否确实要保存(比如一旦保存就无法恢复等),则应在Page_Load事件中添加如下代码:btnSave.

天亮说晚安 4018

Endnote 导入参考文献的时候,格式错误太多了。et.al错误,国标GBT7714在endnote中的详细配置教程,适用于本科,硕士论文文献插入的模板

EndNote插入文献常遇到以下错误主要如下: 等、et al不分; 英文作者全名大写; 期刊名字使用了缩写(图片里没有体现;卷号、期号缺失时出现乱码,多了半个括号;页码范围略去了相同部分;没有悬挂缩进,本文全部解决,全网最细

sakura的博客 3万+

对《重构比从头开始更麻烦》的一些看法

原文引自:http://blog.joycode.com/microhelper/archive/2004/08/06/29865.aspx 作者:MicroHelper第一, 度的把握。 项目开发的控制有四个要素:成本,时间,质量,范围。现在时间,质量已经决定,而且不由我们控制,那么为了控制成本,我们就只有对范围进行界定。首先要制定出一个这段时间结束后要达到的目标。包括项目的性能,可

天亮说晚安 3140

Mcgs 屏幕Modbus RTU通讯调试

昆仑通态屏幕作为Modbus Master 与 Modbus Slave通过RS485接口实现通信的调试记录

madao1234的博客 5572

某城商银行生产容器云平台详细设计方案分享及经验总结

AS3模式的CIS容器部署在K8S集群内,作为F5的控制器,CIS容器通过对K8S集群内Configmap资源进行监控,将Configmap资源中的内容转化为F5的配置,将配置推送给 F5 ,CIS容器还通过K8S标准的API接口完成业务发现和实时监听集群内Pod的变化,一旦Pod发生变化,相应的更新会及时推送给F5,并完成更新。容器技术发展非常迅速,现在应用大多以容器作为承载介质,前两年在容器云上承载的应用类型主要是Web类,随着容器云领域的不断发展,越来越多的应用类型将迁移至容器云,包括有状态应用。

qq_61890005的博客 857

为你的Blog打造个性日历控件

日历控件是dotnet自带的控件之一,功能强大,在很多项目开发中都有用到,对于blog系统来说更是必不可少。纵是好玉也仍需雕琢,为了使它更美观实用,我们还需要对它进行二次开发。第一步是外观设置,这个根据你的需要,只需对它的相关属性做一些调整即可。下图是我调整后的界面属性设置如下:        DayHeaderStyle-BackColor="#5e715e" OtherMonthD

天亮说晚安 2306

从 SAP_FLP_USER 到项目落地:把 SAP S/4HANA 中的 SAP Fiori 授权体系真正讲透

SAP Fiori授权体系涉及前端访问、应用入口和后台业务对象三层权限,仅配置基础角色如SAP_FLP_USER无法满足实际业务需求。项目实践中常见用户能看到应用磁贴但无法访问数据的问题,多因授权模型设计不完整所致。SAP建议采用分层授权策略:基础层确保launchpad访问能力,业务层配置具体应用权限。管理员角色SAP_FLP_ADMIN需结合业务权限使用,测试时可临时配置S_SERVICE=*权限,但生产环境应遵循最小权限原则。完整的授权设计需参考SAP Fiori Apps Reference Lib

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 132

错误的规范比没有更可怕

来公司一个多星期了,一直都在做需求分析。最近项目组里人员调整比较大,我负责的模块也变来变去,很不爽的说。现在负责的是系统管理和系统维护两个模块,算是OA里最难的,包括工作流、多级菜单、数据字典等等。这个项目是公司第一次采用规范化的流程来做的,所以大家都没什么经验。几天做下来,感觉问题多多。 先说说需求分析吧,现在最大的问题就是需求不明确,分配模块时,经理只是简单的说了要求,然后让我们自己去网上找例

天亮说晚安 1643

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OPC UA 地址空间导入实践|XML 与 CSV 两条路径

部署OPC UA服务器时,核心瓶颈在于数据注入——地址空间结构设计与时间序列模拟。XML定义节点结构,需注意命名空间索引(应基于URI而非运行编号)及父子关系双向声明,改动后必须重启生效;CSV注入时序,按SourceTimestamp分组批量写入,建议使用nsu=URI;s=名称格式避免索引错位。推荐使用Prosys仿真服务器,结合UaModeler建模,实现高效、稳定的仿真部署。

MotroEngineer的博客 262

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JS XML验证及格式化处理

该代码提供XML验证、格式化及转换功能:isValidXML通过jQuery解析判断字符串是否为合法XML;formatXML对XML进行缩进美化,支持标签、文本、CDATA和注释;xmlToString将XML文档对象转为字符串;escapeHtml用于HTML转义。整体实现简洁,适用于前端XML处理场景。

程序就是世界 170

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

DOCX 降重怎么保持格式不变?OOXML 格式保持原理与实测

降重后格式是否保持,关键在于工具是否在OOXML文档结构层操作。纯文本处理(如复制粘贴)必丢格式;而支持上传DOCX、仅替换<w:t>文本节点、不改动样式与锚点的工具,可实现带格式降重。实测青研平台处理10万字论文,公式、图表、标题层级均完好,下载即交。建议选型时优先验证小样,确保仅文本变更,避免格式事故。

柳落青 51

8295 高通WFD配置详解XML结构

高通WFD配置文件核心为WFDConfig与WFDClient,前者统领全局,后者负责具体输出。关键在于合理配置WFDPort与WFDPipeline,确保一个QDI显示ID对应唯一端口ID,允许多客户端共享显示资源。通过eQDIDeviceID、eQDIDisplayID、uDisplayNode等参数精确控制显示区域与图层叠加,利用eZOrderBase和eZOrder实现分层合成。实际应用中需避免端口冲突,善用WFDDump工具分阶段验证,确保多客户端协同稳定输出。

车载行业 161

1,270 Star 的 Rust 笔记应用 Quiet.md:百万字敲键 5ms、零 Electron、存储格式选了飞书 DocxXML

开源笔记应用 Quiet.md(1,270 Star)用 Rust + GPUI(Zed 同款框架)纯 GPU 绘制,无 WebView 无 Electron:百万字文档敲键 P95 仅 5.78ms,安装包 18MB;存储格式选飞书 DocxXML,一篇笔记一个 XML 文件,Git/iCloud 同步友好,默认零联网。本文拆解其性能方法论、存储设计与给桌面应用开发者的选型启示。

话梅糖の优快云 Blog 342

WordPress 站点地图 sitemap.xml 404 或空白:先核 SEO 插件与固定链接,再查 CDN 与防火墙

WordPress 前台正常,但打开(或 SEO 插件给出的站点地图地址)却——这和昨日写过的 Cloudflare Flexible SSL /、以及近期的 Heartbeat / autoload、Woo 结账空白、memory exhausted、固定链接「全站伪静态 404」、WP-Cron、Redis、REST 401、媒体上传失败。这里首页、文章页往往都能打开,卡在:SEO 插件未真正启用或互斥、物理挡路、固定链接 rewrite 未刷新、CDN/WAF 对.xml拦截,或robots.txt。

20年技术经验|专注小程序+外贸独立站|已服务500家企业,分享创业中有趣的产品和技术经验。 344

pandas 读取 XLSX 时出现 XML 解析错误

记录 pandas 读取 XLSX 时的 XML 解析错误,说明如何保留原文件、核对工作表及报错位置,并在副本上检查修复影响。

ailx10 182

【码动四季·秋】不写 XML 就没有 SQL 注入了吗:MyBatis-Plus 无 XML 持久层的注入面治理

没有 XML 映射文件就自动免疫 SQL 注入?ArticlePilot 的 D5-1 安全自查证明这个说法只对了一半。无 XML 的 Wrapper 体系把注入入口物理收敛到 apply/last 两个 API,审计成本趋零,但排序字段等"结构位"仍是漏点。本文基于实仓三连扫描的真实命中输出(XML/${}/last-apply 三项,截图为命令实际执行结果)拆解:哪里天然安全、排序字段为何必须白名单、last() 拼接如何禁止、Spring @Value 的 ${} 误报怎么甄别,并给出可复用的注入面自

腾讯云创作之星、华为云云享专家,深耕电商全栈高并发系统实战,分享可商用商城项目源码。 437

Maven 构建产物 `.flattened-pom.xml` 解析与工程化规范

.flattened-pom.xml是Maven构建时由flatten-maven-plugin生成的派生文件,用于将开发态动态POM转化为发布态纯净依赖描述,解决变量解析及配置污染问题。该文件属构建产物,必须加入.gitignore并在IDEA中隐藏;若已误提交需通过git rm --cached清理。Maven 4引入原生Consumer POM后,该插件将逐步退场。

小李同学的博客 140
上一篇: 我的一些买书心得
下一篇: 从BBS项目的开发谈起,回顾毕业后这一年
devercn
博客等级 码龄23年 16粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值