随笔-196  评论-615  文章-0  trackbacks-1
  2012年5月31日
摘要: 事情从Json的序列化和反序列化说起。在C#2.0的项目中,以前经常使用Json.Net实现序列化和反序列化。后来从c#3.0中开始使用新增的DataContractJsonSerializer进行json相关的操作。微软提供的原生类库使用上并不复杂,参考一下msdn你很容易就会写出序列化和反序列化的方法,比如经常被人使用的泛型方法如下:JsonHelper /// <summary> /// 对象转换成json /// </summary> /// <typeparam name="T"></typeparam> /// .阅读全文
posted @ 2012-05-31 22:58 JeffWong 阅读(49) 评论(0) 编辑
  2012年4月15日
摘要: 一、控制反转和依赖注入Ninject是一个轻量级的基于.Net平台的依赖注入(IOC)框架。所谓的IOC,即控制反转(Inversion of Control),它是一个经典的面向对象编程法则,它的作用主要是用来帮助应用程序解耦,并把程序分离成一个个松耦合高内聚的模块。控制反转还有一个名字叫依赖注入(Dependency Injection),简称DI。二、快速无xml配置注入1、定义应用程序ModuleServiceModuleusing LogService;using LogService.Impl;using Ninject.Modules;using NinjectApp.Warri阅读全文
posted @ 2012-04-15 20:01 JeffWong 阅读(260) 评论(1) 编辑
  2012年3月18日
摘要: 1、下载安装NUnit(最新win版本为NUnit-2.6.0.12051.msi) http://www.nunit.org/index.php?p=download2、下载并安装VS的Visual Nunit 2010 插件 http://visualstudiogallery.msdn.microsoft.com/c8164c71-0836-4471-80ce-633383031099注:可通过VS的“视图”->“其他窗口”找到并打开该插件(快捷键:Ctrl+F7)3、新建测试项目UnitTestApp(示例为简单的控制台应用程序),引入nunit.framework类库(默认安装阅读全文
posted @ 2012-03-18 18:40 JeffWong 阅读(393) 评论(0) 编辑
  2012年2月14日
摘要: 下了个c#实现的轻量级IoC开源项目,可是在本地使用时发现一运行就捕捉到“类型初始值设定项引发异常”的异常信息,调试几次还是不能确定到底什么地方出了问题。印象中好像碰到过这种异常,初步估计是某个静态类初始化不成功引起的,但是不能肯定。无奈打开ILSpy查看源码,发现静态初始化的地方非常多,而且代码看上去层层嵌套,类名繁多,一行一行跟上去很容易绕晕。折腾好久未果,无奈google一下,发现早就有人和我碰到一样的问题,一看投票最多的正确解决方法差点没把自己搞疯:项目中直接添加log4net.dll引用即可。经试验,果然。啊啊啊啊啊啊啊啊啊啊啊啊啊…原来是log4net,竟然又是log4net。根据阅读全文
posted @ 2012-02-14 22:09 JeffWong 阅读(336) 评论(0) 编辑
  2012年1月8日
摘要: 熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler。HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET Framework调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理,真正地对客户端请求的服务器页面做出编译和执行。归根结底,Asp.Net所有的HTTP请求最后都是由IHttpHandler的实现来处理的,Asp.Net MVC框架当然也不例外。下面就从MvcRouteHandler、MvcHandler和MvcHttpHandler三个常见的H阅读全文
posted @ 2012-01-08 19:32 JeffWong 阅读(321) 评论(0) 编辑
  2011年12月24日
摘要: 1、javascript实现gb2312编码解码随便看到一段话如下:“老赵的jscex https://github.com/JeffreyZhao/jscex/blob/master/README-cn.md 曲线助赵拿WP7,哇哈哈”老赵你可能已经如雷贯耳了,但没听说过或者还不懂什么是jscex,不知道有什么人已经在使用它讨论它,或者不知道它能做出什么效果出来……充满求知欲望的你习惯性地打开浏览器进行搜索,这时候客户端应该选择什么方式的编码传参呢?我们知道,javascript默认编码函数有三种,即escape,encodeURI和encodeURIComponent(可参考这一篇),其中阅读全文
posted @ 2011-12-24 18:18 JeffWong 阅读(429) 评论(0) 编辑
  2011年11月13日
摘要: 用IE8打开某网页发现弹出了一条信息:stack overflow at line 0,而其他网页显示完全正常,这个时候应该怎么排查错误?我所知道的某个普通web开发人员的排查流程如下:1、凭经验估计是客户端脚本错误,但是不确定,google一下,发现很多人也碰到过这个问题,看了几篇文章之后估计可能是IE乱七八糟插件搞的,也可能是IE8的bug…2、使用IE的脚本调试工具无法跟踪到问题发生位置,也不确定问题根源,怂恿并适度威胁打开网页的人重置浏览器设置,未遂;3、开始思考,堆栈溢出推断可能是递归调用造成的,应该是客户端有问题的javascript造成的,所以注释掉页面中引用的脚本,问题依旧;4阅读全文
posted @ 2011-11-13 16:06 JeffWong 阅读(683) 评论(1) 编辑
  2011年11月6日
摘要: 一、存储命令存储命令的格式:<command name> <key> <flags> <exptime> <bytes><data block>参数说明如下:<command name>set/add/replace<key>查找关键字<flags>客户机使用它存储关于键值对的额外信息<exptime>该数据的存活时间,0表示永远<bytes>存储字节数<data block>存储的数据块(可直接理解为key-value结构中的value)1、添加(1阅读全文
posted @ 2011-11-06 18:17 JeffWong 阅读(831) 评论(0) 编辑
  2011年10月26日
摘要: 最近空闲时间重新仔细看了一下memcached的使用说明文档,硬着头皮看了一点源码,有时候看到一些晦涩的c函数感觉实在恍惚只能跳过。不过也不算是全无收获,终于LZ还敢再看c语言,终于LZ又看起了c语言,终于近期的睡眠质量明显好了很多。扯淡到此结束,下面记录一下自己的学习心得。一、Unix Daemon Processmemcached的守护进程机制使用经典的Unix daemon模式(daemon.c),它的实现部分源码如下:memcached daemon.c#if defined __SUNPRO_C || defined __DECC || defined __HP_cc# pragma阅读全文
posted @ 2011-10-26 23:26 JeffWong 阅读(413) 评论(0) 编辑
  2011年9月13日
摘要: 正在学习MySql编程,安装了官方的C#客户端,在自己的机器上写了个demo,将可能常见且容易出现的问题或错误温故知新一遍,写下来以备日后再用。一、MySql的连接字符串连接字符串无比简单,但是这是必须的。我们需要关心的是,通过.net客户端程序,mysql的连接字符串可以像sql server一样,利用连接池高效管理连接。简单配置如下: <connectionStrings> <add name="MySqlConnString" connectionString="Server =localhost; Database =test; Uid 阅读全文
posted @ 2011-09-13 09:17 JeffWong 阅读(1443) 评论(5) 编辑
  2011年9月4日
摘要: 前一段时间博客园新闻里看到的雄文:你会做Web上的用户登录功能吗?弱弱地表示,按照文章中的标准,写了这么长时间的程序,还真的不完全会写web上的用户登录功能,或者说不能完全按照这个标准写出复杂的登录功能来。也许是被微软惯坏了,深刻反省。好了,言归正传,下面就来重点说说本文要讨论的:实现基于Forms认证的注册和登录等用户基础服务。众所周知,asp.net提供了“Forms”、“Windows”、“Passport”和“None”四种验证模式。在web.config文件中,经常看到类似这样的一段配置节: <authentication mode="Forms"> 阅读全文
posted @ 2011-09-04 21:54 JeffWong 阅读(383) 评论(1) 编辑
  2011年8月25日
摘要: 一、两个相同类型对象属性快速赋值(快速实现深克隆)有时候我们会构造一个实例a并赋值,然后new一个对象b并将a对象的属性完全赋值给b(所谓的深克隆)。这个功能是开发中比较常用的,我记得几年前学.net remoting编程的时候写了很多代码实现过类似的转换。实现这种深克隆的最简单的方法就是属性一一对应并赋值。这样实现的好处是性能较高(和下面介绍的两个方法比较),不好的地方也显而易见:如果属性较多,则代码量相当可观;如果类的属性添加或者减少,则赋值部分的代码必然发生改动。实现属性动态赋值,最简单的方式当然是通过反射(或者emit的方式):ReflectClone /// <summ...阅读全文
posted @ 2011-08-25 20:41 JeffWong 阅读(547) 评论(0) 编辑
  2011年8月10日
摘要: 在上一篇中简单讨论了SqlConnection的正确使用方式,顺带浅谈了一下连接池,不小心带出了一个问题:SqlConnection的Close和Dispose方法执行之后,该连接对象是不是真的放回到池中并且可以复用?今天上午我抽空看了一下SqlConnection的Close和Dispose的IL代码,看完之后并没有直接打消我的疑惑,反而让我更加不确定。今晚又仔细看了下文中的回复,非常汗颜,感觉自己基础还是不太扎实,同时又有点小怀疑。这里尤其感谢园友rdlc2和荒原上的军旗的回复,他们的不吝赐教直接给了我启发,今晚又写了一段简单的测试代码: static void Execute() { S阅读全文
posted @ 2011-08-10 23:44 JeffWong 阅读(1691) 评论(13) 编辑
  2011年8月9日
摘要: 今晚看到上了评论头条的LoveJenny写的为什么要关闭数据库连接,可以不关闭吗?,文章写得简单易懂非常不错,而且代码贴的很到位,下面的讨论也很激烈(老赵都跑过去留言两次了,我恨)。又查看了两遍原文中的代码,我同意评论中有几位的看法,真正造成多线程并行操作数据库时的连接问题可能是由于对SqlConnection的不当使用。为什么呢?再来看一下LoveJenny兄弟贴出的一段重要源码: string sqlConnString = @"Data Source=.\SQLEXPRESS; AttachDbFilename=""E:\DB\NORTHWND.mdf&qu阅读全文
posted @ 2011-08-09 23:32 JeffWong 阅读(4213) 评论(37) 编辑
  2011年7月17日
摘要: 正在考虑web应用缓存层的设计,参考了不少资料,估计还是需要用到相对成熟应用广泛的分布式缓存Memcached。在.net平台上早就有相对成熟的Memcached客户端产品,如BeITMemcached和EnyimMemcached,业余时间看了一下源码,自己分析并调用一下并不困难。这里简单介绍一下利用Memcached的一个简单的缓存层设计,示例代码基于EnyimMemcached,下面以贴代码为主。一、公共缓存接口分析asp.net web caching的缓存类,我们大致可以抽象出如下几个接口方法:Contractnamespace DotNet.Common.EnyimCache{ .阅读全文
posted @ 2011-07-17 19:58 JeffWong 阅读(2623) 评论(5) 编辑
仅列出标题  下一页

-->