.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 ...
随机推荐
- PKG_COLLECTION_LHR 存储过程或函数返回集合类型
存储过程或函数可以返回集合类型,方法很多,今天整理在一个包中,其它情况可照猫画虎. CREATE OR REPLACE PACKAGE PKG_COLLECTION_LHR AUTHID CURREN ...
- hadoop2.6---常用命令
为了方便操作,可以把hadoop加入环境变量 修改,vi ~/.bashrc export HADOOP_PREFIX=/app/programs/hadoop- export HADOOP_MAPR ...
- CSS3 ::selection选择器
一.介绍 之前看到有些网站选中内容的颜色和背景色都不是平时看到的蓝色和白色.今天有兴趣查看了一下,原来是一个很简单的CSS3的选择器::selection的用法. 上例子: <style> ...
- [转]C#网络编程(订立协议和发送文件) - Part.4
本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx 源码下载:http://www.trac ...
- js的event.srcElement与event.target(触发事件对象)
IE下,event对象有srcElement属性,但是没有target属性; Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的,即: fire ...
- Vijos1680距离/openjudge2988计算字符串的距离[DP]
描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb_c_”,“_a_bcbcd_”和“abcb_c_”都是X的扩展 ...
- Flex4 vs Flex3: Repeater vs DataGroup
repeaters太老土了!如果你过去使用过它,你会发出这种感概.现在,我们终于要摆脱它了.Repeaters不仅有沉重的组件,而且接合使用很不方便.那么,Flex 4中有什么可以帮助我们吗?Data ...
- GNU make简要介绍①指定变量、自动推导规则、清除工作目录过程文件
Makefile简介 在执行make之前需要一个命名为Makefile的特殊文件来告诉make需要做些什么. 当使用 make 工具进行编译时,工程中以下几种文件在执行 make 时将会被编译 (重新 ...
- 转:软件架构入门 (from 阮一峰)
说明:其中讲到了 5 种的架构模型,很不错. from: http://www.ruanyifeng.com/blog/2016/09/software-architecture.html
- 58种jQuery模拟CSS3过渡页面切换特效
演示网址 http://www.htmleaf.com/Demo/201503251573.html 点击下载