Duwamish代码分析篇

Duwamish7示例源代码 微软最好的示例源代码,网上商店微软最好的示例源代码,网上商店微软最好的示例源代码,网上商店微软最好的示例源代码,网上商店微软最好的示例源代码,网上商店微软最好的示例源代码,网上商店 立即下载

继续前面的2篇POST《Duwamish架构分析篇》和《Duwamish部署方案篇》,这里在代码层次上分析Duwamish  7.0范例,主要目的是解析Duwamish范例中值得推荐的编码风格和提炼出可以重用的代码或Class。

 

1,读取配置文件类-SystemFramework/ApplicationConfiguration.cs

ApplicationConfiguration类用来读取web.config文件中自定义section的配置信息,初始化一些基本设置。

ApplicationConfiguration类实现IconfigurationSectionHandler接口,并需要实现[C#]

object Create(

   object parent,

   object configContext,

   XmlNode section

)方法,以分析配置节的 XML。返回的对象被添加到配置集合中,并通过 GetConfig 访问。

 

 

部分代码片断解释:

(1)Code Snippet 1 – ApplicationConfiguration. OnApplicationStart()方法

public static void OnApplicationStart(String myAppPath)

{

    appRoot = myAppPath;

    System.Configuration.ConfigurationSettings.GetConfig("ApplicationConfiguration");

    System.Configuration.ConfigurationSettings.GetConfig("DuwamishConfiguration");

    System.Configuration.ConfigurationSettings.GetConfig("SourceViewer");      

}

ConfigurationSettings 类还提供了一个公共方法ConfigurationSettings.GetConfig() 用于返回用户定义的配置节的配置设置,传入的参数section name,如"ApplicationConfiguration",表示要读取的配置节。

 

NameValueCollection nv=new NameValueCollection();

//实例化NameValueCollection 类对象

nv=(NameValueCollection)ConfigurationSettings.GetConfig("ApplicationConfiguration ");

//返回用户定义的配置节的设置

return nv["SystemFramework.Tracing.Enabled"].ToString();

//返回特定键值,如SystemFramework.Tracing.Enabled

 

不过,ConfigurationSettings.GetConfig()方法在调用时,自动调用Create()方法,可以看到ApplicationConfiguration.Create()方法正是用来读取指定section的配置,并初始化设置参数。

 

Global.asax 的 Application_OnStart 事件处理程序向 SystemFramework 的ApplicationConfiguration 类 OnApplicationStart 方法发出调用,正是上述的代码片断。

 

(2)Code Snippet 2 - Global.asax中Application_OnStart()方法

void Application_OnStart()

{

    ApplicationConfiguration.OnApplicationStart(Context.Server.MapPath( Context.Request.ApplicationPath ));

    string configPath = Path.Combine(Context.Server.MapPath( Context.Request.ApplicationPath ),"remotingclient.cfg");

    if(File.Exists(configPath))

        RemotingConfiguration.Configure(configPath);

}

该方法肩负二大任务:(1)调用ApplicationConfiguration.OnApplicationStart()方法,并传入application的根目录(Root Directory)。(2)检测Client端的remoting配置文件是否存在(其实是web server端),如果存在,则读取并初始化remoting配置信息,如配置通道Channel等等,详见《Duwamish部署方案篇》。

 

2,读取web.config中Duwamish相关的一些配置-Common/DuwamishConfiguration.cs

Common/DuwamishConfiguration.cs也实现IconfigurationSectionHandler接口,与SystemFramework/ApplicationConfiguration.cs类相似。

 

DuwamishConfiguration配置节包括如下一些配置信息:

Database connection string(Database连接串)Duwamish.DataAccess.ConnectionString,是否允许页面缓存Duwamish.Web.EnablePageCache,页面缓存过期时间Duwamish.Web.PageCacheExpiresInSeconds,是否允许SSL连接Duwamish.Web.EnableSsl等等。

 

如上所述,调用DuwamishConfiguration Class 是由SystemFramework/ApplicationConfiguration.cs的OnApplicationStart()方法完成的:

System.Configuration.ConfigurationSettings.GetConfig("DuwamishConfiguration");

 

看看页面缓存配置在web page中如何使用的(web/book.aspx.cs文件为例):

//

// If everything succeeded, then enable page caching as indicated

// by the current application configuration.

//

if ( DuwamishConfiguration.EnablePageCache )

{

    //Enable  Page Caching...

    Response.Cache.SetExpires ( DateTime.Now.AddSeconds(DuwamishConfiguration.PageCacheExpiresInSeconds));

    Response.Cache.SetCacheability(HttpCacheability.Public);

}

在Page_Load事件中最后判断是否允许页面缓存。

 

3,验证数据合法性类-SystemFramework/ApplicationAssert.cs

SystemFramework/ApplicationAssert.cs Class用来进行错误检测,并调用SystemFramework/ApplicationLog.cs Class记录错误日志。

 

学习其中的部分代码片断:

(1)Code Snippet 1 – Check Method

[ConditionalAttribute("DEBUG")]

public static void Check(bool condition, String errorText, int lineNumber)

{

    if ( !condition )

    {

        String detailMessage = String.Empty;

        StringBuilder strBuilder;

        GenerateStackTrace(lineNumber, out detailMessage);

        strBuilder = new StringBuilder();

        strBuilder.Append("Assert: ").Append("/r/n").Append(errorText).Append("/r/n").Append(detailMessage);

        ApplicationLog.WriteWarning(strBuilder.ToString());

        System.Diagnostics.Debug.Fail(errorText, detailMessage);

    }

}

 

[ConditionalAttribute("DEBUG")]定义Check()方法为conditional method,如果预处理符号(preprocessor symbol)没有定义,compiler不仅忽略该方法,而且忽略对该方法的调用,和#if DEBUG / #else / #endif有些类似。

 

该方法用来判断条件condition是否为true,如果为false,则调用SystemFramework/ApplicationLog.WriteWarning()方法记录错误日志。

 

(2)Code Snippet 2 – CheckCondition Method

public static void CheckCondition(bool condition, String errorText, int lineNumber)

{

    //Test the condition

    if ( !condition )

    {

        //Assert and throw if the condition is not met

        String detailMessage;

        GenerateStackTrace(lineNumber, out detailMessage);

        Debug.Fail(errorText, detailMessage);

 

        throw new ApplicationException(errorText);

    }

}

 

该方法一般用来在进行前置条件判断,如condition为false,则抛出exception。

 

4,log日志类-SystemFramework/ApplicationLog.cs

ApplicationLog 类实现 Duwamish 7.0 中的记录和跟踪。Web.Config 文件中的配置设置确定是输出到 EventLog 文件、跟踪日志文件还是两者。下面是 Web.Config 文件中的 <ApplicationConfiguration> 节,它指定 EventLog 设置:

 

<ApplicationConfiguration>

    <!-- Event log settings -->

    <add key="SystemFramework.EventLog.Enabled" value="True" />

    <add key="SystemFramework.EventLog.Machine" value="." />

    <add key="SystemFramework.EventLog.SourceName" value="Duwamish7" />

   

    <add key="SystemFramework.EventLog.LogLevel" value="1" />

    <!-- Use the standard TraceLevel values:

             0 = Off

             1 = Error

             2 = Warning

             3 = Info

             4 = Verbose -->

Web.Config 文件的同一节还指定跟踪配置。Duwamish 7.0 跟踪日志的默认位置是:[安装 Visual Studio .NET 的驱动器号]:/Program Files/Microsoft Visual Studio .NET 2003/Enterprise Samples/Duwamish 7.0 CS/Web/DuwamishTrace.txt

 

在实际的应用系统开发中,用来提供Log功能的类应该比这个ApplicationLog类要好,这样就不去分析了,如Microsoft Exception Management Application Block就不错。

 

5,Web.config配置文件-使用Web.congfig文件存储application设置

Duwamish 7.0 通过使用 Forms 身份验证来实现安全性。Forms 身份验证将未经授权的用户重定向到Web 窗体,该窗体提示用户输入其电子邮件地址和密码。

 

(1)配置 Forms 身份验证

Web.config 文件中的设置配置 Forms 身份验证。对于 Duwamish 7.0,Web.Config 文件按如下所述指定 Forms 身份验证的使用:

    <authentication mode="Forms">

      <forms name=".ADUAUTH" loginUrl="secure/logon.aspx" protection="All">

      </forms>

    </authentication>

    <authorization>

      <allow users="*" />

    </authorization>

 

authentication元素只能在计算机、站点或应用程序级别声明。如果试图在配置文件中的子目录或页级别上进行声明,则将产生分析器错误信息。

 

如上所示,Web.Config 将 .ADUAUTH 指定为身份验证 Cookie 的名称。当用户请求受限资源时,公共语言运行库将未经授权的用户重定向到在上面的 Web.Config 设置中指定的Login.aspx。protection="All" 设置指定应用程序使用数据验证和加密来保护 Cookie。若要进一步限制资源,Duwamish 7.0 会将安全资源放置到名为 secure 的子文件夹中并使用额外的 Web.Config 文件(在secure文件夹),在该文件中指定只有经过身份验证的用户才可访问该子文件夹的内容。

    <authorization>

      <deny users="?" />

      <allow users="*" />

    </authorization>

 

<deny users="?" /> 标记指定拒绝对所有匿名用户的访问。<allow users="*" /> 标签允许访问所有已验证身份的用户。

 

经过secure/logon.aspx认证通过的请求,重新定向最初的URL。

// 将已验证身份的用户重定向回最初请求的 URL。

FormsAuthentication.RedirectFromLoginPage("*", false);

 

(2)用户定义的配置节

  <configSections>

    <section name="ApplicationConfiguration" type="Duwamish7.SystemFramework.ApplicationConfiguration, Duwamish7.SystemFramework" />

    <section name="DuwamishConfiguration" type="Duwamish7.Common.DuwamishConfiguration, Duwamish7.Common" />

    <section name="SourceViewer" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  </configSections>

 

section元素包含配置节声明,name 指定配置节的名称,type 指定从配置文件中读取节的配置节处理程序类的名称。配置节处理程序(即实现 IConfigurationSectionHandler 接口的类)读取设置。

 

上面定义了3个配置节处理程序:Duwamish7.SystemFramework.ApplicationConfiguration

Duwamish7.Common.DuwamishConfiguration

System.Configuration.NameValueSectionHandler

 

前面两个配置节处理程序是由application提供的,后面的System.Configuration.NameValueSectionHandler是.Net Framework提供的,该类也实现了IconfigurationSectionHandler接口,用来提供配置节中的名称/值对配置信息。

 

 

6,web/PageBase.cs基类

最后谈谈web/PageBase.cs基类吧,所有 Duwamish 7.0 中的所有web页都继承名为 PageBase 的基类,该类实现 Duwamish 7.0 应用程序的 ASP.Net 页中使用的常见属性和方法,这种设计方法值得推荐。

 

Code Snippet分析:

/// <summary>

///     Handles errors that may be encountered when displaying this page.

///     <param name="e">An EventArgs that contains the event data.</param>

/// </summary>

protected override void OnError(EventArgs e)

{

    ApplicationLog.WriteError(ApplicationLog.FormatException(Server.GetLastError(), UNHANDLED_EXCEPTION));

    base.OnError(e);

}

重载OnError方法,使application遭遇到未处理错误的时候,自动调用ApplicationLog.WriteError()来记录错误日志。

 

另外,觉得Duwamish的password处理有些特别,是以byte形式存放在Database中,避免明文的方式,以提高安全性(将在《Duwamish密码分析篇》进行中分析)。

 

Duwamish源代码(VB.Net) Duwamish源代码(VB.Net),非安装版 立即下载

相关推荐

浮点数精度陷阱全解析:从IEEE 754到深度学习部署选型

在计算机数值计算中,浮点数是表示带小数数字的标准方式,但它的存储规则决定了精度和边界天生存在限制。许多开发者都曾遭遇过0.1+0.2不等于0.3的尴尬,或是模型训练中loss变成NaN的困扰,这些问题的根源往往指向IEEE 754标准中的规格化、非规格化表示及舍入规则。理解浮点数的底层原理,不仅能避开直接的比较判断陷阱,还能指导我们在不同场景下做出合理的技术选型。从C语言的printf到Python的repr,从嵌入式串口打印到深度学习中的FP32、FP16、BF16、TF32格式,浮点数知识贯穿底层开发和

weixin_34314962的博客 463

duwamish7的一些代码分析总结

duwamish7的一些代码分析总结 前言:感谢 yhcnux的(一),因为正好我也在学习duwamish7,《理解(一)》对我帮助很大。我们要做的项目非常大,我初学.net,希望通过研究duwamish7快速掌握.net的开发框架。我刚刚学习了一周,除了与大家分享我的学习体会外,我最主要的目的还是希望各位大虾给我指点一些我理解不到位或是没有理解到及理解错误的地方,在下不甚感激!!(呵呵,

f2k的专栏 1211

新出的智谱GLM-4.7很牛逼?

Zhipu AI(智谱)最近发布的 GLM-4.7 再次刷新了开源大模型的天花板。作为一款约 400B 参数规模的 MoE 模型,它不仅在传统的代码与推理任务上超越了 DeepSeek-V3.2 和 Kimi-K2 等强力对手,更通过**“保留思考(Preserved Thinking)”和“交错思考(Interleaved Thinking)”**等架构级创新,重新定义了 Agentic Workflow 的设计范式。

kakaZhui的博客 2397

微软.NET经典架构例程Duwamish 7.0分析

FM:http://dev.youkuaiyun.com/develop/article/18/18110.shtm Duwamish 7.0是微软对基于.NET技术三(N)层架构的经典解释,本人对其架构及源码进行了仔细分析,写出来与大家分享,不足之处,敬请赐教!也希望大家对三层架构有进一步的提高,大家共同进步! 这是微软官方的总体架构: 下图是我对Duwamish 7.0详细的架构描述,简短...

weixin_33958366的博客 256

Innovus快捷键大全:从入门到精通的效率提升指南

本文是Innovus快捷键从入门到精通的效率提升指南,旨在帮助芯片后端设计工程师通过掌握核心快捷键,将重复性鼠标操作转化为高效的肌肉记忆,从而显著提升版图设计、编辑和分析的工作流速度。文章系统讲解了视图导航、对象选择编辑、流程管理等关键快捷键组合,并提供了个性化配置与实战策略,助力工程师突破效率瓶颈,实现人机合一的流畅设计体验。

silver的专栏 797

STM32F103C8T6全桥逆变电路PWM波生成(基于HAL库)

全桥逆变电路需要两组开关管相互协同工作,故需要两路PWM控制信号,为了防止电源短路,需要保证同一桥臂的上下两个开关管不会同时导通,故两路PWM在相位上需要相差180°;为了保证高频变压器不会磁饱和,使正负半周PWM占空比相同。但是传统的互补输出达不到调节占空比调节输出电压的效果。......

weixin_45042735的博客 6025

Duwamish代码分析篇一

Duwamish代码分析篇一 继续前面的2篇POST《Duwamish架构分析篇》和《Duwamish部署方案篇》,这里在代码层次上分析Duwamish 7.0范例,主要目的是解析Duwamish范例中值得推荐的编码风格和提炼出可以重用的代码或Class。 1,读取配置文件类-SystemFramework\ApplicationConfiguration....

weixin_33910434的博客 260

DeepLabv3+改进专栏

🔥【DeepLabv3+改进专栏!探索语义分割新高度】🌟 你是否在为图像分割的精度与效率发愁?📢 本专栏重磅推出:✅ 独家改进策略:融合注意力机制、轻量化设计与多尺度优化✅ 即插即用模块:ASPP+升级、解码器。

AIcurator的博客 2576

Duwamish -- 代码分析篇

Duwamish代码分析篇 Written by: Rickie LeeNov. 02, 2004 继续前面的2篇POST《Duwamish架构分析篇》和《Duwamish部署方案篇》,这里在代码层次上分析Duwamish  7.0范例,主要目的是解析Duwamish范例中值得推荐的编码风格和提炼出可以重用的代码或Class。 1,读取配置文件类-SystemFra

vividboy的专栏 1032

AUTOSAR进阶图解==>AUTOSAR_SWS_ECUStateManager

AUTOSAR ECU State Manager 摘要 AUTOSAR ECU状态管理器(EcuM)是Classic Platform 4.4.0规范中的核心模块,负责管理ECU的整个生命周期,包括启动、运行、关机和睡眠等状态转换。EcuM通过协调各基础软件模块的初始化过程,确保系统可靠运行。 主要功能包括: 启动管理 - 控制从硬件初始化到应用运行的完整启动序列 状态转换 - 管理RUN/POST_RUN/SHUTDOWN等状态切换 唤醒验证 - 区分真实与虚假唤醒事件 关机序列 - 确保安全关机保存关

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 2473

基于粒子群算法优化的灰色预测模型GM实现数据预测(附带MATLAB代码)

灰色预测模型(Grey Model,简称GM)是一种常用的非线性时间序列预测方法,它在处理少量数据和缺乏规律性的序列预测问题上表现出良好的性能。c. 建立灰色微分方程:根据紧邻均值生成序列建立灰色微分方程,通常形式为:dx(n) + ax(n) = b,其中dx(n)是紧邻均值生成序列,x(n)是原始序列。为了提高GM模型的预测准确性,我们将使用粒子群算法来优化灰色微分方程的参数a和b。a. 利用灰色微分方程进行预测:根据已得到的灰色微分方程,进行后续时间点的数据预测。首先,定义了两个函数。

CoderExtra的博客 607

Duwamish架构分析篇

Duwamish架构分析篇2006-11-20 20:04 Duwamish是Microsoft提供一个企业级的分布式系统架构,如果开发企业级的分布式系统,可以模仿这种架构,如果是开发一些简单的系统,则完全可以简化。   以前也学习过Duwamish范例

凡间精灵 428

【STM32 Blue Pill编程】-STM32CubeIDE开发环境搭建与点亮LED

本文为使用 STM32Cube IDE 的 STM32 Blue Pill 入门教程。 在本文中,我们将介绍如何控制 STM32 Blue Pill 的 GPIO 引脚。以及开发环境搭建。 本系列文章将重点介绍采用 ARM Cortex-M 的 BluepellSTM32F103C8 微控制器以及如何使用 STM32CubeIDE 对其进行编程。 STM32CubeIDE是STM32官网提供的IDE

视觉与物联智能 1070

duwamish7

Duwamish深入剖析-配置篇http://www.microsoft.com/china/community/program/originalarticles/TechDoc/duwamish_con.mspxDuwamish深入剖析-结构篇http://www.microsoft.com/china/community/program/originalarticles/TechD

ghibrain的专栏 971

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Duwamish深入剖析-结构篇

摘要: 本文深入详细的介绍了Duwamish网上电子书店例程的结构框架,并详细的分析了该结构的若干特点和设计模式。 引言: 能够作为Visual Studio .Net附带的例子,Duwamish一定包含了微软.Net设计队伍希望向开发者传达的某些信息,而事实上,Duwamish也的确能够称作是一个.Net开发者学习的经典示例,无论是从其设计架构,编程技巧或代码风格,都向我们展示了一个

QJH 894

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Duwamish部署方案篇

Duwamish部署方案篇 Duwamish 7.0 支持两种多计算机部署方案。非分布式部署方案在一台 Web 主机上部署 Web 层、业务外观、业务规则和数据访问层,但可以在群集间复制该 Web 主机以达到负载平衡。分布式方案在单独的服务器上部署特定的组件。例如,业务外观、业务规则和数据访问层可能位于独立于 Web 主机的服务器上。在实际部署中数据库服务器通常位于单...

weixin_34290390的博客 237

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Duwamish深入剖析-配置篇

Duwamish深入剖析-配置篇 摘要: 本文详细介绍了Duwamish网上电子书店的Web.config配置文件的结构处理方式以及用途,阐述了配置文件的各功能模块中的作用。 目录: 引言 配置节处理程序声明 自定义配置节 配置节处理程序 总结 参考资料 作者 引言: 几乎在每本介绍Asp.Net编程的书里,在谈到如何管理数...

angang6606的博客 108
上一篇: Duwamish部署方案篇
下一篇: Duwamish密码分析篇, Part 1
louisp
博客等级 码龄21年 5粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值