.Net分布式异常报警系统-客户端及服务端API
客户端
public class ErrorLogModule : IHttpModule
{ #region IHttpModule Members public void Dispose()
{
} public void Init(HttpApplication context)
{
context.Error += context_Error;
} #endregion private void context_Error(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication) sender;
ClientErrorEntity errorMessage = new ClientErrorEntity(application.Server.GetLastError().GetBaseException(),
application.Context);
SendErrorEntity.SendError(errorMessage);
}
}
public ClientErrorEntity(Exception exception, HttpContext httpContext)
{
Id = Guid.NewGuid().ToString("N"); MachineName = Environment.MachineName;
Ip = Common.GetLocalIp();
ExceptionType = exception.GetType().FullName;
ExceptionMessage = exception.Message;
ExceptionSource = exception.Source;
ExceptionDetail = exception.ToString();
DateTime = DateTime.Now;
HttpException httpException = exception as HttpException;
if (httpException != null)
{
HttpStatusCode = httpException.GetHttpCode();
} if (httpContext != null)
{
HttpRequest request = httpContext.Request;
RequestUrl = request.Url.AbsoluteUri;
ServerVariables = Common.ConvertCollectionToDictionary(request.ServerVariables);
QueryString = Common.ConvertCollectionToDictionary(request.QueryString);
Form = Common.ConvertCollectionToDictionary(request.Form);
Cookies = Common.ConvertCollectionToDictionary(request.Cookies);
}
Type = ;
}
public static void SendError(ClientErrorEntity errorMessage)
{
try
{
string jsonstr = JsonConvert.SerializeObject(errorMessage);
//异步, 确保不会影响主逻辑
sendPostdelegate.BeginInvoke("http://192.168.16.39:90/api/Error", jsonstr, ContentType.Json, ,
Encoding.UTF8,
Encoding.UTF8, Response, sendPostdelegate); //这里请求地址 建议改为域名的方式, 如果没有域名,建议请求地址和webtoken类似为可配置
}
catch (Exception exception)
{
Common.Log("错误信息上传失败:" + exception.Message);
}
}
<configSections>
<section name="WebWarningSetting" type="System.Configuration.SingleTagSectionHandler"/>
</configSections>
<WebWarningSetting WebToken="1E8C46FC74DC41569EFF63C92A7A4087"/>
服务端API
public HttpResponseMessage Post([FromBody]ErrorEntityDto errorEntity)
{
if (errorEntity != null && !string.IsNullOrWhiteSpace(errorEntity.Id))
{
if (RedisHelper.EnqueueItemOnList("ErrorEntityQueue", errorEntity.Id)) //先将ErrorEntity.Id放入到队列中,确保顺序不会变
{
if (RedisHelper.Set(errorEntity.Id, errorEntity)) //将实体添加到Redis中
{
return ReturnPlainText("ok");
}
return ReturnPlainText("set error");
}
return ReturnPlainText("add item to list error");
}
return ReturnPlainText("modle error");
}
.Net分布式异常报警系统-客户端及服务端API的更多相关文章
- WCF客户端获取服务端异常[自定义异常]
引言 经过不断的摸索,询问/调试,终于学会了关于WCF客户端与服务端之间异常的处理机制,在此来记录自己的成果,用于记录与分享给需要的伙伴们. 首先感谢[.NET技术群]里群主[轩]的大力帮助,如有需要 ...
- .Net分布式异常报警系统-简介
系统简介 分布式异常报警系统就是收集系统运行过程中产生的未处理异常,检查系统运行的状态,并将异常信息统一发送到服务端,由服务端将信息通知到相关的责任人. 问题 我们在项目开发中可能遇到以下几个问题: ...
- 客户端与服务端的事件watcher源码阅读
watcher存在的必要性 举个特容易懂的例子: 假如我的项目是基于dubbo+zookeeper搭建的分布式项目, 我有三个功能相同的服务提供者,用zookeeper当成注册中心,我的三个项目得注册 ...
- C# TCP实现多个客户端与服务端 数据 与 文件的传输
C#菜鸟做这个东东竟然花了快三天的时间了,真是菜,菜,菜--- 下面是我用C#写的 一个简单的TCP通信,主要的功能有: (1) 多个客户端与服务器间的数据交流 (2)可以实现群发的功能 (3)客户端 ...
- Android客户端与服务端交互之登陆示例
Android客户端与服务端交互之登陆示例 今天了解了一下android客户端与服务端是怎样交互的,发现其实跟web有点类似吧,然后网上找了大神的登陆示例,是基于IntentService的 1.后台 ...
- java客户端与服务端交互通用处理 框架解析
一.综述 java 客户端与服务端交互过程中,采用NIO通讯是异步的,客户端基本采用同一处理范式,来进行同异步的调用处理. 处理模型有以下几个要素: 1. NIO发送消息后返回的Future 2. 每 ...
- Oracle Tuxedo工作站客户端与服务端的样例程序
服务端代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <cty ...
- Socket通信客户端和服务端代码
这两天研究了下Socket通信,简单实现的客户端和服务端代码 先上winfrom图片,客户端和服务端一样 服务端代码: using System; using System.Collections.G ...
- java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并
实现效果图: eclipse项目中初步整合之前的各个客户端和服务端的窗口与工具类,效果如下图: 已将注册服务器线程RegServer功能放到LoginServer中,使用客户端与服务端的request ...
随机推荐
- 0004 plsql的安装
PL/SQL是Oracle开发的主要工具,安装很简单,在官网 “https://www.allroundautomations.com/plsqldev.html” 选择合适的版本,也有多国语言包,下 ...
- MVC Ajax Helper或jQuery异步方式加载部分视图
Model: namespace MvcApplication1.Models { public class Team { public string Preletter { get; set; } ...
- iOS 懒加载不起作用的原因
在.m类中定义了一共strong属性,用懒加载getter方式去处理,发现用的时候无论如何属性都是null,调试后,发现根本没进getter方法. (ps:懒加载,又称为延迟加载.说的通俗一点,就是在 ...
- Log4Net根据不同的Logger名称,生成日志文件到不同的地方。
1.定义日志记录类 1: public class Log4NetLogger : ISystemLogger 2: { 3: static log4net.ILog securityLogger = ...
- 用PS设计等高线效果的背景图片
有些简单的单网页,如果利用等高线效果的背景图片,再配合合适的背景色,能达到绚丽的效果.如下图所示: 本文就介绍该等高线效果的背景图片是如何制作的.Follow Me!!!! 1.新建文档,尺寸:100 ...
- shell tips
1.shopt 命令可以设置shell的可选参数 shopt [-psu] [optname...] -s 开启某个选项 -u 关闭某个选项 -p 列出所有可设置的选项 其中开启extglob选项,s ...
- C# 格式化小总结
C#中几个常用的格式化标识符 C或c Currency 货币格式 D或d Decimal 十进制格式(十进制整数,不要和.Net的Decimal数据类型混淆了) E或e Exponent 指数格式 F ...
- 分布式系统理论之Quorum机制
一,Quorum机制介绍 在分布式系统中有个CAP理论,对于P(分区容忍性)而言,是实际存在 从而无法避免的.因为,分布系统中的处理不是在本机,而是网络中的许多机器相互通信,故网络分区.网络通信故障问 ...
- Vijos1680距离/openjudge2988计算字符串的距离[DP]
描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb_c_”,“_a_bcbcd_”和“abcb_c_”都是X的扩展 ...
- CSS中单位px和em,rem的区别
PX特点: 1 IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位: 3. Firefox能够调整px和em,rem,但是96%以上 ...