Monthly Archives: February 2009

Debug 4 Life 系列讲座

From http://blogs.msdn.com/coding4fun/archive/2009/02/19/9434805.aspx VS2008做了一些Debug方面的增强.不爽是有些快捷键变了. 1. Stack Window Breakpoints  原来在Call Stack中也可以加断点,以前没这么用过 2. Breakpoints in SubExpressions add “Break at Function”选中要加断点的表达式,按F9 Debug->New Breakpoint->Break at Function 3. Advanced BreakPoint BreakPoint HitCount Condition 高级breakpoint的图标对于Breakpoint Condition可检查变量的值: i==5 is true, 也可以检查函数返回值: a.CheckName() is true 断点是加在代码上的,对于多线程环境中的断点,需要使用Filter,是否使用这个功能,可以在Tools->Options->Debug->General中设置 4. Debugging Threads线程常用操作 … Continue reading

Posted in Debug | Leave a comment

NetMassDownloader代码阅读

Kerem Kusmezer找到John Robbins,说他用Fiddler摸出了Microsoft pdb server的下载规则,提议联手搞一个工具来批量从MS symbol server上下载.NET Framework对应的pdb和源文件. 这就是NetMassDownloader的出处:Download All the .NET Reference Source Code at Once with Net Mass Downloader NetMassDownloader工作原理每一个.NET Assembly都是一个PE文件,其中Debug Directories一段记录了这个Assemly对应的PE文件的GUID,pdb的更新标识和文件名,根据这些信息,可以得到一个pdb文件的路径.比如mscorlib.dll对应的pdb文件为mscorlib.pdb,GUID为4881A0A3C5B74C1E9C204B1871B8890D, 更新标识为1,那么pdb文件的url就是http://referencesource.microsoft.com/symbols/mscorlib.pdb/4881A0A3C5B74C1E9C204B1871B8890D1/mscorlib.pdb 要用IE从http://referencesource.microsoft.com/上下载文件,必须为IE添加User-Agent在注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform 位置新建字符串(REG_SZ),名为Microsoft-Symbol-Server/6.8.0004.0,数据留空。 打开pdb文件后,找到字符串SRCSRV: ini ——————————————–.根据其后的内容,最终可以拼出mscorlib.dll的源文件的url 详情可以参考<<手动下载.NET Framework 源代码>>一文 在Debug过程中,Debugger(VS, winbug)会加载每个用到的dll对应的pdb,pdb中包含了函数名,函数参数,变量名,源代码的位置,二进制代码和源代码的对应关系… NetMassDownloader的核心功能 … Continue reading

Posted in Programming | Leave a comment

VS 2008 和 2005 Debug .NET Framework 时遇到的问题

早在2007.10, ScottGu就宣布MS发布了.NET Framework的源代码,并演示了VS 2008的相应配置.1. 一定要安装VS 2008 QFE.参考Scott Hanselman日志.NET Framework Library Source Code available for viewing,否则加载Symbol的菜单被Disable了 什么是QFE? QFE = Quick Fix Engineering, 是HotFix的别名:Quick Fix Engineering (QFE) is a Microsoft term for the delivery of individual service updates to its operating systems … Continue reading

Posted in Debug | Leave a comment

自定义ASP.NET Membership

Membership是ASP.NET 2.0 重点推荐的功能,它提供了大量的UI和底层的支持,用几个控件(Login, LoginView, LoginStatus, LoginName, PasswordRecovery…),就可以实现一个完整的用户管理模块,用几行web.config配置就可以完成用户权限的控制,有权限的组员才能看到某些页面,某些菜单… ,做起DEMO又快又好. 可是实际中用它的好像并不多. 程序员大多有代码洁癖,不希望自己的的代码中存在无用冗余的东西,使用ASP.NET Membership,缺省会用到ASPNET数据库,数据库的设计不可能和现实需求完全一致,某些MS在扩展性方面的设计可能对现实需求并无意义,让开发者很不快, 而且UI控件的缺省行为也往往和现实中需求稍有差异,如果要扩展,就需要彻底搞清楚MS的设计思路,基于Provider模式进行扩展,提供自定义的Provider,这不是设置几个属性那么简单的事.如果要偷懒,只好把思路往控件上靠,只好放弃个性的效果. 对于已有的系统中(此时用户数据已经存在),应用Membership更需要彻底搞懂底层的实现. 程序员常常需要快速开发和个性效果,以及方便和代码透明度之间找出平衡点 深层次的东西是很难用语言描述的,最好的表达方式不是MSDN中的文档,而是代码和数据库定义. 1.一个web.config的例子ASP.NET使用了Provider模式来支持扩展和自定义,在web.config中提供配置,runtime会根据配置生成相应的provider,实现扩展.     <membership defaultProvider="MY_MembershipProvider" userIsOnlineTimeWindow="15">          <providers>            <add name="MY_MembershipProvider                    connectionStringName="LocalSqlServer"                    applicationName="/"                    enablePasswordRetrieval="true"                    enablePasswordReset="true"                    requiresQuestionAndAnswer="true"                    requiresUniqueEmail="true"                    passwordFormat="Encrypted"                    maxInvalidPasswordAttempts="5"                    passwordAttemptWindow="10"                    minRequiredPasswordLength="5"                    minRequiredNonalphanumericCharacters="0"                    type="MY_MembershipProvider, AssemblyName"            />          </providers>     </membership> userIsOnlineTimeWindow 用来指定用户在一个操作后多长时间内被认为是在线的,具体实现?enablePasswordRetrieval … Continue reading

Posted in Web Development | Leave a comment

一个ASP.NET程序的骨架

把每次重复的事情模板化,用最短的时间,做最正确的事情.但衣橱里有很多这种骨架(Skeletons in my closet),就修炼成精了 1. 主要的组成部分及每一块的要害3层结构   BLL 业务逻辑层   DAL 数据访问层, Provider 模式   表现层(页面) 代码复用:    BasePage: 为所有的页面提供共用的逻辑    UserControl + Local Resource,     建议对可复用的User control和页面使用Local Resource,可以直接copy到另一个project 多语言支持    Global Resource    Image resource的Localization    User control + Local Resource     Menu+ web.sitemap + Global Resource … Continue reading

Posted in Web Development | Leave a comment

(ZT)Request获取url信息的各种方法比较

在ASP.NET编程中经常需要用Request获取url的有关信息.测试的url地址是http://www.test.com/testweb/default.aspx, 结果如下: Request.ApplicationPath:                     /testwebRequest.CurrentExecutionFilePath:       /testweb/default.aspxRequest.FilePath:                                /testweb/default.aspxRequest.Path:                                     /testweb/default.aspxRequest.PathInfo: Request.PhysicalApplicationPath:          E:\WWW\testweb\Request.PhysicalPath:                         E:\WWW\testweb\default.aspxRequest.RawUrl:                                 /testweb/default.aspxRequest.Url.AbsolutePath:                    /testweb/default.aspxRequest.Url.AbsoluteUri:                      http://www.test.com/testweb/default.aspxRequest.Url.Host:                                http://www.test.comRequest.Url.LocalPath:                        /testweb/default.aspx 当url中带参数时可以使用:HttpContext.Current.Request.Url.PathAndQuery.ToString()// 本页地址:   Request.URL;   上页地址:   Request.UrlReferrer   Request.ServerViables["http_referer"]   Request.RawUrl   Request.RawUrl.QueryAndPath   System.IO.Path.GetFileName(Request.FilePath.ToString())   http://blog.csdn.net/powerglover/archive/2009/01/04/3705401.aspx

Posted in Web Development | Leave a comment

ASP.NET 2.0 Form 验证的Cookieless属性

<system.web>    <authentication mode="Forms">          <forms loginUrl="Login.aspx"                 protection="All"                 timeout="30"                 name=".ASPXAUTH"                 path="/"                 requireSSL="false"                 slidingExpiration="true"                 defaultUrl="default.aspx"                 cookieless="UseDeviceProfile"                 enableCrossAppRedirects="false" />      </authentication></system.web> cookieless有4个值: UseCookies 不管客户端是否支持cookie,都使用cookie来存储用户标识 UseUri 不管客户端是否支持cookie,都使用url来存储用户标识 AutoDetect 自动检测客户端实际是否支持cookie 再来决定使用两种方式中的哪一种 UseDeviceProfile(缺省值) 根据设备文件来判断是否支持cookie,进而决定使用哪种方式.在<%windir%>Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers目录下有很多的.browser文件,这些文件记录了设备(浏览器)的能力,在asp.net中,会根据这些.browser文件读取浏览器信息System.Web.HttpBrowserCapabilities browser = Request.Browser;"Supports Cookies = " + browser.Cookies; HttpBrowserCapabilities 对象所公开的属性指示浏览器的内在功能,但不一定反映出当前的浏览器设置。例如,Cookies 属性指示浏览器是否内在地支持 Cookie,但不指示发出请求的浏览器是否已启用了 Cookie。有关更多信息,请参见 ASP.NET … Continue reading

Posted in Web Development | Leave a comment

ASP.NET 程序的多语言支持(未完成)

一. ASP.NET对UI Culture 和 Culture的选择Web程序上要显示哪个语言的字符串资源,是由程序执行时当前线程的UI Culture决定的,即Thread.CurrentThread.CurrentUICulture可以认为其逻辑如下//–参数为资源路径和资源所在AssembleyResourceManager L10N = new ResourceManager(”WebAppCulture.strings”, typeof(_Default).Assembly); this.Label1.Text = L10N.GetString(”Name”);在运行时,ASP.NET根据Thread.CurrentUICulture选择最匹配的资源文件 Web程序中要显示的日期,货币等数据的格式由当前线程的Culture(Thread.CurrentThread.CurrentCulture)决定, 有下列相关设置1. 用户在浏览器中对语言的设定  用户可以在IE中设定自己希望使用的语言,这个Language List会被发送到Server端Web程序和ASP.NET会综合考虑用户的这个设定和Server端的设定,最终决定程序中用到的语言 参考Setting a Preferred Language in Internet Explorerhttp://quickstarts.asp.net/QuickStartv20/aspnet/doc/localization/culture.aspx 2.Web Server所运行的OS的Culture注意,并不是Regional中的设定  如果不指定Page的Culture(UICulture), CurrentThread.CurrentCulture(CurrentUICulture)为OS的culture如果指定Page的Culture(UICulture)  为auto, CurrentThread.CurrentCulture(CurrentUICulture)为浏览器的Preference Language 3.在ASP.NET页面上设定当前线程的Culture和UICulture<%@ Page UICulture="en-US" Culture="en-US">等同于设置Page.UICulture和Page.Culture属性,也就是设定当前Page对应的Thread的UICulture和Culture.注意这两个属性由ASP.NET Framework使用,不建议在代码中使用! 这个命令会和浏览器中指定的Language list一起产生作用如果不在<%@ … Continue reading

Posted in Web Development | Leave a comment

挤公车

等公车是一件很无奈的事情,但如同豆腐干加花生米可以嚼出火腿的味道,当你仔细观察品味其中人和事,把无奈当成一张饼,在你的脑海里用文火,翻来覆去慢慢的烙,香味就会慢慢的飘出来.注意我说的不是夏天公车里的味道. 机会其实就是把你送往成功的公车,当然它是国营的公交车,你只知道它会来,但是你不知道它什么时候会来,挤上这趟车是每个人梦想,和这辆车擦肩而过让无数人抱憾,错过了这趟车或乘错了车,一生为之改变 公车常会和你开玩笑,等车不来,刚点上一支香烟,车来了,赶紧掐灭香烟,等车停下来,你却发现人多到饱和,给这一幕配上台词,就是”肏 ,再肏”.车要么不来,要么一下来两辆,你选择了人少的那辆,可是这辆车半路上坏了! 等车的态度也有所不同,积极者可能会选择受点累,多走几步,去乘客比较少的前一站,或是有别的车可以选乘的下一站,消极者会选择等待,死等,甚至是卯上劲的等,当然也有道理,要是我刚一走开,车就来了,那多冤啊.股市里的套牢者就是这么想的. 又比如相对论,夏天,公车里密密麻麻的乘客意味着闷热和体臭,可寒冷的冬天,那就意味着温暖. 挤车队伍中最后的几个人总是会恳请车门附近的人”再往里点吧,快迟到了”,可当他们上了车,成为车门附近的人,面对别人的恳求,这些人往往表现出的是鄙夷或充耳不闻.让人联想到宫里的太监,和当年给班长洗袜子现在让别人洗袜子的新班长 乘车还有一个好处,就是可以听到很多谈话,如果你有兴趣做高尔基和路遥,或是给赵本山写小品,就记着在乘车时带个小本子 有关乘公车的笑话也很多,比如有一个人一边追赶,一边大喊”师傅,等等我”,乘客中有好事者头伸出窗外,用黑色幽默安慰他”八戒,你就别追了”.还有一辆车人很多,实在是挤不上去了,富有同情心的司机对剩下乘客说,你们跟着车跑两步吧,然后启动,加速,急刹车,开后门,乘客们全数成功的进入车厢.

Posted in Uncategorized | Leave a comment

使用Nullable而不要使用System.DBNull

  Framework Design Guidelines: System.DBNullhttp://blogs.msdn.com/brada/archive/2009/02/09/framework-design-guidelines-system-dbnull.aspx

Posted in 21条军规 | Leave a comment