.Net技术
文章平均质量分 67
游北亮
位于福州,从事技术团队管理、架构师、DevOps等
展开
-
线上故障小记:低效的组合算法导致的崩溃
快12点了,准备吃饭了,突然收到告警:Process [user2-activity] CPU Time > 50%某个站点CPU占用超50%了。注:因为是服务混部,所以对机器上的单个服务,CPU不应该超过50%。排查步骤:1、看了一下监控大屏,该服务的所有节点,CPU都偏高,不正常。2、检查对应的数据库慢查询,一切正常。3、网关上,下线某台节点,然后对该站点的进程,导出一个内存Dump文件;4、用WinDebug打开分析,发现有4个线程执行时间较长,卡在 ProcessCalTicke原创 2020-09-04 12:05:25 · 162 阅读 · 0 评论 -
仿Java实现的,DotNet版本的Feign类库
简介Feign是Java里的一个声明式的http api请求库,可以通过注解(类似.Net的特性)来快速并优雅的封装对http的调用,并且方便理解和后续的维护,已经广泛的在Spring Cloud的解决方案中应用。基于这些优点,我也为.Net封装了一个类似的类库:Beinet.Feign,下面简单介绍一下使用方法。注1:该库基于Framework4.0开发(可以支持WinXP系统),并依...原创 2020-03-21 13:02:02 · 902 阅读 · 2 评论 -
简介LinFu.DynamicProxy动态代理,及Attribute的构造过程
这里写自定义目录标题这2天,基于项目可维护性的考虑,要实现一套类似于Java Feign的类库,可以快速并且优雅的声明和调用API,当然,Feign都是接口声明,不考虑做接口实现,因此采用LinFu.DynamicProxy作为动态代理,来拦截所有Feign接口方法的调用。LinFu.DynamicProxy介绍,可以参考这里,至于为啥不用Castle DynamicProxy,因为Castl...原创 2020-03-18 22:38:10 · 510 阅读 · 0 评论 -
.Net常见线程安全问题整理
最近线上又出现了几次线程安全问题 导致的服务异常,线程安全问题都是隐藏的炸弹,有可能几个月都不出问题,也有可能连续几天爆炸好几次,问题出现的结果完全是无法确定的,包括但不限于如下结果:应用异常,且无法自恢复,必须重启站点或服务;陷入死循环,导致CPU占用100%,从而整台服务器崩溃;错误数据入库,导致一系列的排查、数据修复的困难,甚至可能无法修复数据;因此,很有必要做几次全局的筛查...原创 2019-09-29 17:11:40 · 1064 阅读 · 0 评论 -
记录一次问题排查过程:Random线程不安全导致的CPU满
先写结论System.Random是线程不安全的,要避免使用单例,或者进行加锁操作。参考:https://docs.microsoft.com/en-us/dotnet/api/system.random这里有一句话:If you don’t ensure that the Random object is accessed in a thread-safe way, calls to me...原创 2019-03-21 15:58:02 · 1064 阅读 · 0 评论 -
记一次Windows与.Net 线上请求超时的问题排查过程
某日,收到同事反馈,大量支付数据丢失,未能正常入库,无法确定原因。找同事了解了一下流程和日志,流程很简单:错误日志就是job那边有大量的超时异常:System.Net.WebException: 操作超时 在 System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) 在 System.Net...原创 2019-06-10 20:27:42 · 924 阅读 · 0 评论 -
WinDbg排查.net性能或内存问题步骤简述
安装步骤:第一步当然是安装了,需要注意的是,千万不要搜索 windbg 然后下载,搜索到的windbg安装文件,都不是我们想要的,真正的windbg,实际上是在微软的SDK里,下载链接在这里:https://developer.microsoft.com/en-US/windows/downloads/windows-10-sdk点击这个网页里的 DOWNLOAD THE .ISO,文件...原创 2019-03-29 15:01:40 · 2718 阅读 · 4 评论 -
System.Web.PreApplicationStartMethodAttribute应用场景
前几天整理了一下开发框架的内容,记录一下我们的项目中,对 System.Web.PreApplicationStartMethodAttribute这个属性的一些应用场景。注:Nuget上有个WebActivatorEx库,它也定义了相同的一个类:PreApplicationStartMethodAttribute,简单来说:WebActivatorEx.PreApplicationStartM...原创 2019-02-27 13:15:26 · 685 阅读 · 0 评论 -
.net异步上下文对象简介:AsyncLocal 和 CallContext
在Web开发过程中,有时需要在整个生命周期里传输数据,一般常见的做法就是使用 :HttpContext.Current.Items.Add(“name”, “value”);这样就可以在整个上下文里访问到需要的对象了,甚至HttpContext.Current.Items也是支持async异步上下文的。如果你只做web开发,那么用它就对了,可以不考虑其它对象。注:我在测试过程中,发现有时a...原创 2019-01-22 20:49:45 · 3299 阅读 · 0 评论 -
.net的线程本地存储Thread Local Storage:ThreadStaticAttribute/TheadLocal/LocalDataStoreSlot
在项目中,发现有同学使用了ThreadStaticAttribute,之前没怎么使用过,特意了解和测试了一下,不是很推荐使用这个特性。这3个东西,叫做线程本地存储,全名:Thread Local Storage。ThreadStaticAttribute的文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.threadstaticatt...原创 2019-01-09 16:36:29 · 279 阅读 · 0 评论 -
Chrome或Firefox浏览器对静态资源文件的缓存时长是多久!
先放上结论吧,Chrome和Firefox对js、css之类的文件,在内存中的缓存时长,是:(访问时间 - 该文件的最后修改时间) ÷ 10假设文件 a.js 最后编辑时间是 2018年12月1号 10点0分0秒;Chrome的第一次访问时间是 2018年12月1号 12点0分0秒;第一次访问与文件编辑时间相差2小时,即7200秒,那么缓存时长就是720秒即结论如下:1、在 201...原创 2018-12-07 16:59:27 · 14490 阅读 · 0 评论 -
HTTP中间层不支持PUT/DELETE等特定METHOD时的处理
昨天,有兄弟跑过来找我,说正在开发的支付宝小程序,只支持HTTP协议里的GET和POST请求,不支持PUT/DELETE请求!?!?我们的很多线上服务都已经是按restful设计,有PUT和DELETE的api,总不可能让这些服务都为了支付宝,适配一堆POST的api吧?这个工作量不说,后续的维护以及新功能开发,都存在麻烦!暂时不考虑这种方案!这时,一个同事说有一个扩展属性:X-HTTP-Me...原创 2018-11-30 13:32:13 · 9744 阅读 · 9 评论 -
RabbitMQ使用详解与C#版Demo
对RabbitMQ的使用也有一段时间了,也经常给别人做一些解释,看网上很多总结都不尽人意,我也在这里做一个总结吧。 当然,看官方文档写的更加详细就是了:http://www.rabbitmq.com/documentation.html 我这里只总结一些常用的知识点,并尽可能描述的清楚一些,如果有疑问,欢迎提问。入门概念:RabbitMQ:企业级消息队列,遵循AMQP协议,基于Erla...原创 2018-05-23 09:56:22 · 6142 阅读 · 5 评论 -
RabbitMQ的ack或nack机制使用不当导致的队列堵塞或死循环问题
记录几个RabbitMQ使用过程中容易踩的那些坑:1、启用ack机制后,没有及时ack导致的队列异常;简要代码如下,设置消息自动ack,会导致消息未处理完,出异常了,结果消息丢失了, 解决方法就是把代码里的true,改成false,并在消息处理完后发ack响应。// 要监听队列,所以不能用using关闭channel通道var channel = GetChannel();var...原创 2018-05-24 09:10:02 · 42951 阅读 · 19 评论 -
踩坑记:C#访问阿里云的API小结,阿里云的文档有待改善……
为运维管理方便需要,写了一个小工具去调用阿里云的API,包括操作ECS、SLB、域名等等API,结果就这么一点点小东西,也被阿里云的文档坑了好多次,下面5个问题,有3个跟阿里云文档相关…… 关键是阿里云的客服服务还差……1、计算签名的AccessKeySecret不能直接用,要在末尾添加一个 &比如AccessKeySecret是“testsecret”,那么用于计算 HMAC ...原创 2018-09-04 17:52:40 · 2901 阅读 · 0 评论 -
Redis的事务和分布式锁实现
先做Redis事务介绍Redis提供了简单的事务命令:Watch、Multi、Exec,注意没有Rollback。 简单应用:watch aaawatch bbbmultiset aaa value1set bbb value2set ccc value3exec上述Redis指令中,先对2个key进行监视:aaa和bbb, 然后通过multi启动事务,再加入3个指...原创 2018-05-10 20:14:56 · 1171 阅读 · 0 评论 -
Javascript和C#真正可以交互的DES加解密代码
因项目需要,要用js加密后,提交给C#解密,在网上找了半天,网上有无数个版本,却找不到一个能互相使用的甚至就连都是js版本的,都不能互通,汗一个。 因为时间关系,没有去深究加密代码,就随便下载了一个JS版本的,并把它改写成C#版本的 这样JS加密后的结果,C#也能解密反之C#加密后的结果,JS也能解密 我把它发出来给大家共享吧 注:源代码是VS.Net2008版本创建的,里面包含js的加解密函...原创 2009-06-24 17:13:00 · 4684 阅读 · 0 评论 -
引用asp.net母版页后,母版页和内容页的页面事件执行顺序
如下,经测试得到的执行步骤:第01步、内容页的 Page_PreInit第02步、母版页的 Page_Init第03步、内容页的 Page_Init第04步、内容页的 Page_InitComplete第05步、内容页的 Page_PreLoad第06步、内容页的 Page_Load第07步、母版页的 Page_Load第08步、母版页或内容页的 按钮点击等回发事件(Master或Content的...原创 2009-08-28 11:52:00 · 4827 阅读 · 0 评论 -
支持AJAX的TreeView树例子,使用省市县三级xml作演示
前段时间做项目,因为要用TreeView来展示组织架构结果发现员工太多,上万人,导致TreeView加载时数据量太大造成IE假死就去网上搜索TreeView+Ajax的例子,结果无一例外的都是自己给TreeView添加自定义的js方法,然后自己写ajax功能来动态填充TreeView还有一部分同志,干脆扔掉TreeView已经开发好的程序,改用Dtree(也要改代码)等其它树来实现 后来查询MSD...原创 2009-07-06 15:50:00 · 5384 阅读 · 5 评论 -
解决:防止页面按钮被重复点击,导致页面重复提交的问题
页面重复提交导致的问题就是数据被重复保存,解决方案也分2类:1、在客户端进行处理,比如防止用户多次点击按钮;2、在服务器端进行处理,这也是必须要做的方法,因为客户端的操作是可以绕过的 在服务器端进行处理的方法很多,比如Session等等,这里不加讨论这里主要讨论对正常操作时,如何通过在客户端进行处理,防止这种操作 1、最简单的办法就是禁用提交按钮,比如:<asp:Button id="btn...原创 2009-12-14 16:06:00 · 6559 阅读 · 1 评论 -
ASP.Net做的简易版文件管理器,就一个aspx文件的版本
由于工作中的程序日志,是通过IIS自带的目录浏览功能来查看,不能进行一些处理,比如文件太多,页面显示太慢,想移动一些文件到旧的目录,或一些其它的文件管理操作,就做了一个简单的资源管理器,为了简单,代码和html全在一个文件里,什么压缩解压的功能也没加,界面如下: 注:把文件放到网站目录下即可运行,注意进入时要加一个QueryString来填写进入密码,初始密码为:beinet.cn 请自行修改代码...原创 2010-11-19 13:55:00 · 2137 阅读 · 0 评论 -
DataReader没有Close之前与Output参数的问题
前天在代码里遇到的bug,代码如下:var para = new SqlParameter("@re", SqlDbType.DateTime) { Direction = ParameterDirection.Output };using (var con = new SqlConnection(constr))using(var commadn = con.CreateCommand())...原创 2013-05-28 11:46:46 · 1356 阅读 · 0 评论 -
Asp.net获取客户端IP常见代码存在的问题:伪造IP
在网卡随便一搜: Asp.net 客户端IP可以搜索到很多页面,提供的代码基本都类似于:if (Request.ServerVariables["HTTP_VIA"] != null) return Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(new char[] { ',' })[0];else return Requ...原创 2013-06-27 19:01:08 · 2338 阅读 · 1 评论 -
关于access to the path is denied问题的解决
之前比较经常碰到这个问题,就是对网站文件没有访问权限(比较多的是没有修改权限,因为一般都有everyone的读取权限),要说解决这个问题很简单,直接给everyone用户组添加修改权限就好了方法:在要操作的目录或文件上按右键=》属性=》安全,点添加按钮,输入everyone,点确定,然后勾上允许修改就ok了 但是这么做是有一定的安全隐患的,想想,任意一个人都可以编辑你的网站上的文件。 之前也搜索过...原创 2009-03-11 15:46:00 · 27857 阅读 · 0 评论 -
ASP.Net中,PlaceHolder、Panel等控件未实现INamingContainer,导致FindControl无效
这2天在开发中发现,如果在new的Panel中使用FindControl,会出现找不到控件的情况,代码如下: Panel spnButtons = new Panel();Button btn = new Button();btn.ID = "btn1";spnButtons.Controls.Add(btn);// 输出True,表示没有找到控件Response.Write(spnBu...原创 2009-06-04 11:20:00 · 2016 阅读 · 1 评论 -
C#中struct的2个小问题
1、设置链表,通常代码如下:public struct Links{ public int data; public Links next;} 上面的代码编译时会出错:“Links”类型的结构成员“Links.next”在结构布局中导致循环解决方法有2个:a、不用struct,改用class就ok了b、坚持使用struct,那么需要折衷一下,加一个object成员和Links属性来曲...原创 2013-05-31 10:52:35 · 3652 阅读 · 0 评论 -
在Net开发中常见易犯的错误,简单罗列一下
4.1 程序或站点里的所有线程代码,都必须用try捕获全部异常,因为线程异常未处理,会导致整个进程崩溃,导致程序退出,或站点重启 4.2 类的静态构造函数代码,必须捕获所有可能出现的异常,如果静态构造函数出现异常,则在应用程序或web站点重启之前,都始终保持异常状态,无法恢复,如下面的a.txt文件不存在,那么即使后来主动创建了a.txt文件,异常也无法恢复: static class ...原创 2013-05-28 15:00:27 · 871 阅读 · 0 评论 -
IIS部署日志站点时出现的UTF8文件乱码问题及解决
问题产生原因为方便查看线上问题日志,在服务器的IIS上新建了一个站点,根目录指向log目录,并开始了目录浏览; 嗯,可以进入网站,看到目录列表了,找到一个txt文件,点击看看日志,咦,怎么里面的中文变成了#%$@好吧,以前经常处理这个问题,就是点击chrome的菜单=》更多工具=》编码=》UTF8就可以解决, 我熟练的打开了菜单,我找,找,找,编码菜单到哪去了???什么鬼? 原来ch...原创 2017-09-19 11:27:36 · 7140 阅读 · 3 评论 -
ASP.Net Ajax应用初步:使用AJAX直接调用后台方法
首先都是使用VS.Net2005创建一个 ASP.Net AJAX-Enabled Web Application 1、使用AJAX直接调用后台方法:后台代码:namespace AJAX1{ public partial class _Default : System.Web.UI.Page { // 需要标识为WebMethod [System.We...原创 2008-08-27 14:17:00 · 4365 阅读 · 1 评论 -
使用ICallBackEventHandler接口,后台使用Response.End问题的解决
之前一直使用ICallBackEventHandler做一些轻量级的Ajax操作,前端点击按钮,弹出等待的信息框,接收到信息后,再取消信息框的显示,但是发现后台使用了Response.End后,前台就一直没有反应,比如下面的代码,如果后台出现了Response.End,隐藏信息层的方法就会一直执行不到,导致页面一直处于等待状态了:<script language="Javascript" t...原创 2008-10-23 16:33:00 · 1765 阅读 · 2 评论 -
ASP.Net2.0 AJAX Extensions 1.0的安装
以前一直没有去应用ajax,这2天用了一下,发现资料出奇的乱,问题出在ajax的版本实在太多,什么atlas,ajaxpro等等很多之前的类库,在现在都已经不存在了,自己整理一下安装和使用吧。这篇是ajax的安装,版本是ASP.Net2.0 AJAX Extensions 1.0。 1、下载并安装ASP.Net2.0 AJAX Extensions 1.0(ASPAJAXExtSetup.msi文...原创 2008-08-27 13:54:00 · 6225 阅读 · 0 评论 -
使用ICallbackEventHandler接口实现的轻量级下拉框联动
今天再写一个基于Asp.Net,用回发实现的下拉框联动,这是基于DotNet里一个接口:ICallbackEventHandler,通过实现这个接口,让页面有了可以无刷新回发的能力从而可以实现我们的目的:联动另外,这个方法也比使用AJAXPro控件来的简单,因为它不用引入控件。不啰嗦了,看代码吧: <%@ Page Language="C#" %><%@ Implements I...原创 2008-08-05 15:15:00 · 1450 阅读 · 0 评论 -
Exception from HRESULT: 0x800736B1,Could not load file or assembly 'Microsoft.SqlServer.BatchParser
今天发布Web项目,结果运行出错,错误信息如下:[COMException (0x800736b1): 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。 (Exception from HRESULT: 0x800736B1)] [FileLoadException: Could not load file or assembly 'Microsoft.SqlServ...原创 2009-07-30 12:55:00 · 4919 阅读 · 0 评论 -
Visual Studio编译出的程序,以32位模式运行的问题与解决
前段时间,线上有一个.net写的服务程序,会不定期的卡死且无法恢复,需要手工重启进程。 经过一段时间的跟踪和性能监控,发现在卡死之前,内存都会上升到1.8G左右,然后就开始波动,重启进程后,内存跌到较低的水平,再经过慢慢上升,几天后升到1.8G又卡死…… 简单排查了一下内存上升的原因,是业务上有一些消息要求长驻内存,所以会上升,并不是泄露。 于是做个简单的技术改造,把长驻消息转存到Redis...原创 2018-07-25 11:03:07 · 10515 阅读 · 0 评论 -
C#中override重写与new隐藏的区别,以及C#与Java的Override区别
在C#中:override重写,是指对父类中的虚方法(标记为override)或抽象方法(标记为abstract)进行重写,实现新的功能,它必须与父类方法的签名完全一致,而且与父类方法的可访问性也必须一致new方法隐藏,是指在子类中重新定义一个签名与父类的方法相同的方法,这个方法可以不用new修饰,只是编译时会弹出一个警告信息:如果是有意隐藏,请使用关键字 new。上面2者的区别参看下面的代码:u...原创 2008-06-19 15:05:00 · 4063 阅读 · 2 评论 -
社区看到的一个求素数的算法题,附上我的代码
社区网址:http://topic.csdn.net/u/20080606/21/49811f8c-39a1-40d8-b8a5-10793bbf18fd.html我用C#写了一下第一题的解法,可惜在我的机器上运行时间太长了,大家一起探讨一下,看看怎么优化一下。题目是:找出满足以下条件的最小素数: a.3个连续素数的和 b.17个连续素数的和 c.45个连续素数的和 d.979个连续素数的和 e....原创 2008-06-13 16:39:00 · 1297 阅读 · 0 评论 -
小巧精致的ASP.Net分页控件
效果演示如下:具体的控件代码如下,在你的VS.Net里新建一个用户控件,然后把下面的代码拷贝进去就可以用了,最下面是使用示例:using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;...原创 2008-06-12 16:39:00 · 1733 阅读 · 0 评论 -
ASP.Net页面实现ICallbackEventHandler接口,不能工作的问题。
由于ICallbackEventHandler是一种轻便的AJAX应用接口,我经常使用它,而不使用AJAX控件今天在应用时,发现这个接口不工作,点击按钮时没有反应,在VS2005中加断点发现不会访问后台程序,重建一个简单页面,又能正常工作经过删除页面代码,最后发现是代码里有个按钮的ID等于action,导致工作不正常: <asp:Button ID="action" runat="serve...原创 2008-05-21 09:23:00 · 1082 阅读 · 0 评论 -
错误处理:The viewstate is invalid for this page
今天做一个ASP.NET页面时,需要把页面提交到另一个页面处理,1.ASPX的代码大致如下:<form runat=server id=frm>……</form><script language=javascript>function editIt(path){ document.frm.action = '2.aspx';//提交到2.ASPX处理 docum...原创 2006-12-07 22:01:00 · 2034 阅读 · 1 评论 -
算24点的算法,个人觉得比网上那些要完善
详细代码下载,参见:http://download.csdn.net/source/1632402先说说我的思路,以四个整数计算24为例,这4个数存放在arr中,分别为arr[0]~arr[3]:首先是4个数的顺序组合,应该是有以下24种:arr[0],arr[1],arr[2],arr[3]arr[0],arr[1],arr[3],arr[2]arr[0],arr[3],arr[2],arr[1...原创 2006-11-30 10:47:00 · 2373 阅读 · 0 评论