ASP.NET架构分析

ASP.NET三层架构(Visual Studio ) 前两天我们了解了数据库的创建以及编写,那么大家会想编写数据库总要用呀,所以今天我就来带大家了解一下asp.net的三层架构,三层架构里就能够很好的运用数据库 一、 三层架构概述 三层结构是一种严格分层方法,即数据访问层(DAL)只能被业务逻辑层(BLL)访问,业 务逻辑层只能被表示层(UI)访问,用户通过表示层将请求传送给业务逻辑层,业务逻辑层完 成相关业务规则和逻辑,并通过数据访问层访问数据库获得数据,然后按照相反的顺序依次 返回将数据显示在表示层。有的三层结构还加了Factory、 Mode... 阅读详情

最近听了微软讲师邵志东的讲座“深入解析ASP.NET架构”的视频讲座,我觉得对ASP.NET架构有一定的认识,现在对讲座做一点总结,以及发表我对ASP.NET架构相关知识的自身理解,如有不妥之处,希望各位同仁不吝指出!
一、ASP.NET工作原理:
首先通过一个图来了解一下ASP.NET工作原理,
  
                                     图一 ASP.NET工作原理
通过该图的顺序我们可以看到ASP.NET是如何工作的,可以看到客户端和服务器端是如何交互的。看到客户端是如何请求服务器,服务器接受到客户端请求后,是如何处理请求的,并将处理结果返回给客户端的。
需要指出的是图中的aspnet_isapi.dll是用来处理.aspx文件的,其实IIS服务器是只能识别.html文件的,当浏览器对服务器进行http请求时,IIS服务器识别到.aspx文件时,IIS服务器将其交给aspnet_isapi.dll来处理,aspnet_isapi.dll将.aspx文件发送给.NET FrameWork中CLR(公共语言运行时)进行编译,编译后将HTML流返回给浏览器。
这在IIS服务器上是可以来配置的,配置中默认.aspx文件是由aspnet_isapi.dll来处理的,其实也可以去添加某种特定类型的文件由特定的可执行文件来处理,如:可以添加一个.apx文件来由aspnet_isapi.dll来处理。
具体配置如下图:

                                图二 IIS配置


趁此说一下IIS服务的一些知识:
IIS本事是不支持动态页面的,也就是说它仅仅支持静态html页面的内容,对于如.aspx,.php,.cs等,IIS并不会处理这些标记,它就会把它当作文本,丝毫不做处理发送到客户端。为了解决这个问题。IIS有一种机制,叫做ISAPI的筛选器,它是一个标准组件(COM组件。)  ASP.NET服务在注册到IIS的时候,会把每个扩展可以处理的文件扩展名注册到IIS里面(如:*.aspx,*.php等),扩展启动后,就根据定义好的方式来处理IIS所不能处理的文件,然后把控制权跳转到专门处理代码的进程中(如*.aspx由aspnet_isapi.dll来处理)。让这个进程开始处理代码,生成标准的HTML代码,生成后把这些代码加入到原有的HTML代码中,最后把完整的HTML返回到IIS,IIS再把内容发送给客户端。


通过下图可以看到更具体的ASP.NET页面的执行过程:


                                 图三 ASP.NET页面的执行过程

 


二、ASP.NET请求的处理过程:

上面我们已经了解了ASP.NET的工作原理,知道了客户端是如何和服务器端进行交互的。现在我们可以来看看服务器端到底是怎样来处理客户端的请求。
Web服务器提供了很多处理请求的功能,但是为了满足开发者的需求,开发者需要扩充或扩展Web服务器的功能,就是向Web服务器插入某些组件来增强Web服务器的功能,微软公司提供了ISAPI(Internet服务器API)。就比如说aspnet_isapi.dll可以来处理.aspx等文件,我们也可以开发组件(如xxx.dll)来处理某种类型的文件或者去做一些其他增强服务器能力的事情。

简单的说如何去增强Web服务器的能力呢,我们就可以去开发一些组件,开发组件需要一种技术叫ISAPI。
(ISAPI是一种重要的技术,它允许我们增强与ISAPI兼容的Web服务器的能力,其中IIS就是一种与ISAPI兼容的Web服务器。)

增强Web服务器的能力的组件的类型主要有两种:
1、ISAPI过滤器:客户端每次向服务器发出请求的时候,请求要经过过滤器。客户端不需要在请求中指定过滤器,只需要简单地把请求发送给Web服务器,接着Web服务器把请求传递给相关的过滤器。接下来过滤器可能修改请求,执行某些登录操作等。也就是说,客户端每次请求服务器时,必须要经过“过滤”,如需要检查用户名和密码,符合条件时才让通过请求,“检查用户名和密码”的过程就是ISAPI过滤器所要做的操作。过滤器可以有很多(web.config中指定,后面将讲到),并且请求都必须要经过所有的过滤器进行“过滤”。

2、ISAPI扩展:ISAPI扩展是使用Win32动态链接库(xxx.dll)来实现的,也可以把ISAPI扩展看做一个普通的应用程序。它的处理目标是http请求。也就是说Web服务器可以来处理http请求,但是你可以去扩展服务器,去自定义对http的请求,达到更好的效果。

基于上面的内容,我们可以将ASP.NET请求的处理过程总结如下:

ASP.NET请求处理过程是基于“管道模型”的,客户端向服务器发送http请求时,在模型中ASP.NET把http请求传递给管道中的所有模块(ISAPI过滤器),每个模块都接受http请求并且有完全控制权限,模块可以用任何自认为的方式(通过开发人员来开发,如校验用户名密码等)来处理请求。一旦请求经过了所有Http模块(如用户名、密码符合),就最终被Http处理程序(ISAPI扩展)处理,http处理程序对请求进行一些处理,并且结果将再次经过管道中的http模块。

                图四  管道模型


我自己举例来说吧,我建立了一个.apx文件,要求客户端访问该页面,并在客户端返回"我是apx文件,我是被“ISAPI过滤器”过滤过的,并被"ISAPI扩展"处理过的"。在访问页面时必须需要用户名和密码。
此时我就需要开发组件来扩充Web服务器,因为Web服务器没有校验指定的用户名和密码的能力也没有处理.apx文件的能力。我就需要开发“ISAPI过滤器”组件(用来校验用户名和密码)和ISAPI扩展组件(处理.apx文件)。

那我们怎么开发“ISAPI过滤器”组件和“ISAPI扩展”组件呢?

1、开发“ISAPI过滤器”
   HttpModule(Http模块)实现了ISAPI 过滤器的功能,是通过对IhttpModule接口的继承来处理。HttpModule是实现了System.Web.IhttpModule接口的.NET组件,这些组件通过在某些事件中注册自身,把自己插入到ASP.NET请求处理管道中(如上图中的Module1,Module2)。当这些事件发生的时候,ASP.NET调用对请求有兴趣的HTTP模块,这样该模块就能处理请求了。

   HttpModule的实现:
   1、编写一个类,实现IhttpModule接口,要添加引用System.Web
   2、实现Init方法,并且要注册需要的方法。如:AuthenticateRequest等
   3、实现注册的方法
   4、实现Dispose方法,如果需要手工为类做一些清除工作,可以添加Dispose方法的实现,但这不是必需的,通常可以
     不为Dispose方法添加任何代码
   5、在Web.config文件中,注册您编写的类。
  
   下面通过一个实例来实现HttpModule(具体见附件代码)

1、我编写了SecurityModules类实现IHttpModule接口
2、实现了Init方法,并且向Application对象注册事件处理程序(myAuthenticateRequest),当http请求执行到AuthenticateRequest(建立用户标   识时)时,就执行注册的方法myAuthenticateRequest
3、实现注册的方法myAuthenticateRequest,主要来校验userid和password
4、实现Dispose方法


 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.Web;
 5using System.Security.Principal;
 6
 7namespace MyModule1
 8{
 9    public class SecurityModules : IHttpModule
10    {
11        public void Init(HttpApplication objApplication)
12        {
13            // 向Application 对象的事件AuthenticateRequest注册处理程序
14            objApplication.AuthenticateRequest += new EventHandler(this.myAuthenticateRequest);
15        }
16
17        private void myAuthenticateRequest(object objSender, EventArgs objEventArgs)
18        {
19            // 鉴别用户的凭证,并找出用户角色
20            HttpApplication objApp = (HttpApplication)objSender;
21            HttpContext objContext = (HttpContext)objApp.Context;
22            if ((objContext.Request["userid"] == null) && (objContext.Request["password"] == null))
23            {
24                objContext.Response.Write("用户名和密码不允许为空!");
25                objContext.Response.End();
26            }
27
28            string sUserId = "";
29            sUserId = objContext.Request["userid"].ToString();
30            string sPassword = "";
31            sPassword = objContext.Request["password"].ToString();
32            string[] strRoles;
33            strRoles = AuthenticateAndGetRoles(sUserId,sPassword);
34            if ((strRoles == null) || (strRoles.GetLength(0) == 0))
35            {
36                objContext.Response.Write("用户名和密码错误!");
37                objApp.CompleteRequest();//终止一个http请求
38            }
39            //GenericIdentity类表示具有指定名称和身份验证类型的用户
40            GenericIdentity objIdentity = new GenericIdentity(sUserId, "CustomAuthentication");
41            objContext.User = new GenericPrincipal(objIdentity,strRoles);
42        }
43
44        /**//// <summary>
45        /// 根据http请求的userid和password来验证和获取角色。
46        /// </summary>
47        private string[] AuthenticateAndGetRoles(string sUserId, string sPassword)
48        {
49            string[] strRoles = null;
50            if ((sUserId.Equals("xieex")) && (sPassword.Equals("111")))
51            {
52                strRoles = new String[1];
53                strRoles[0] = "Administrator";
54            }
55            else if ((sUserId.Equals("zhangsan")) && (sPassword.Equals("222")))
56            {
57                strRoles = new String[1];
58                strRoles[0] = "User";
59            }
60            return strRoles;
61        }
62
63        public void Dispose()
64        {
65
66        }
67    }
68}
5、新建一个项目,在Web.config文件中注册该类,当访问该项目的页面时,都要校验userid和password才能访问,并且在该项目的引用中添加MyModule1.dll

在Web.config文件中添加:


<!--HttpModule通过对HttpApplication对象的一系列事件的处理来对HTTP处理管道施加影响,这些事件在HttpModule的Init方法中进行注册包括BeginRequest等。-->
      <httpModules>
        <add name="myModule1" type="MyModule1.SecurityModules,MyModule1"/>
      </httpModules>
  <!--add将HttpModule类添加到应用程序-->
  <!--add格式:<add name="modulename(随便起)" type="命名空间。类名(该类继承IHttpModule接口), (assemblyname)dll文件名"/>  -->

  <!--remove从应用程序移除HttpModule类-->
  <!--remove格式<remove name="modulename">-->

  <!--clear从应用程序移除所有HttpModule映射-->
  <!--clear/-->
此时访问该项目中的页面时,就要校验用户名和密码了。

此时输入在URL上增加“?userid=xieex@password=111”时就可以进入页面了。

这样我们就开发完了ISAPI过滤器,注意过滤器可以有多个,只要在web.config中的httpModules节点中Add即可,它们都会起作用的不会覆盖的。

HttpModule通过对HttpAplication对象的一系列事件的处理来对HTTP处理管道施加影响,这些事件在HttpModule的Init方法中进行注册。具体的事件发生顺序如下:


                         图五  事件发生顺序

关于事件发生顺序可以参考例子:MultiHttpModule.csproj,这个例子也反应了过滤器可以有多个,只要在web.config中的httpModules节点中Add即可,它们都会起作用的不会覆盖的。

 

2、开发“ISAPI扩展”组件

还是拿下面的例子来说:
“我自己举例来说吧,我建立了一个.apx文件,要求客户端访问该页面,并在客户端返回"我是apx文件,我是被“ISAPI过滤器”过滤过的,并被"ISAPI扩展"处理过的"。在访问页面时必须需要用户名和密码。
此时我就需要开发组件来扩充Web服务器,因为Web服务器没有校验指定的用户名和密码的能力也没有处理.apx文件的能力。我就需要开发“ISAPI过滤器”组件(用来校验用户名和密码)和ISAPI扩展组件(处理.apx文件)。”
上面的ISAPI过滤器可以解决“校验用户名和密码”问题,下面我们利用ISAPI扩展来处理.apx文件。

HttpHandler实现了ISAPI扩展的功能,它处理请求(Request)的信息和发送响应(Response)。HttpHandler功能的实现要继承IHttpHandler接口。
HTTP处理程序是实现了System.Web.IHttpHandler接口的.NET组件,任何实现了IHttpHandler接口的类都可以用于处理输入的HTTP请求。

HttpHandler的实现:
1、编写一个实现IHttpHandler接口的类;
2、在Web.config或machine.config文件中注册这个处理程序;
3、在Internet服务管理器把文件扩展(你想要的文件扩展名)映射到ASP.NET ISAPI扩展DLL(aspnet_isapi.dll)上。(该步也可不用做)

同样通过一个实例来实现HttpHandler(具体见附件代码)
1、编写了HandlerAPX类,该类继承了IHttpHandler接口,该类实现了ProcessRequest方法和IsReusable属性。注意要引用System.Web

 1using System;
 2using System.Collections.Generic;
 3using System.Text;
 4using System.Web;
 5
 6namespace MyHandler
 7{
 8    public class HandlerAPX : IHttpHandler
 9    {
10        Implementation of IHttpHandler#region Implementation of IHttpHandler
11        /**//// <summary>
12        /// http处理程序的核心。我们调用这个方法来处理http请求。
13        /// </summary>
14        /// <param name="context"></param>
15        public void ProcessRequest(HttpContext context)
16        {
17            HttpResponse objResponse = context.Response;
18
19            objResponse.Write("<html><body><h1>你好!我是apx文件!");
20            objResponse.Write("</body></html>");
21        }
22
23        /**//// <summary>
24        /// 我们调用这个属性来决定http处理程序的实例是否可以用于处理相同其它类型的请求。
25        /// HTTP处理程序可以返回true或false来表明它们是否可以重复使用。
26        /// </summary>
27        public bool IsReusable
28        {
29            get
30            {
31                return true;
32            }
33        }
34        #endregion
35    }
36}
 

2、新建一个项目,在Web.config文件中注册该类,并且在该项目的引用中添加MyHandler.dll

在Web.config文件中添加:


      <httpHandlers>
        <add verb="*" path="*.apx"
               type="MyHandler.HandlerAPX,MyHandler" />
      </httpHandlers>
      <!--add格式:<add verb="*" path="要处理文件"  type="命名空间.类名(该类继承IHttpHandler接口), (assemblyname)dll文件名"/>          -->
说明当IIS识别到.apx文件时,就调用HandlerAPX类来处理。

http请求通过httpHandler来处理,本来系统就对其有默认处理,那和自定义的处理是如何协调的呢?看下图就可以明白,其实两者是选择其一的:


                                     图六  HttpHandler之间的关系

 

在“图五 事件发生顺序”中,我们看到HttpHandler建立后,此后Session就可以用了,下面来看看在HttpHandler中如何访问Session.
1、不能直接通过HttpContext访问
2、必须实现IRequiresSessionState接口
3、IRequriresSessionState接口指定目标HTTP处理程序接口具有对会话状态值的读写访问权限,这是一个标记接口,没
   有任何方法。

同样通过一个实例来实现在HttpHandler访问Session(具体见附件代码)
1、编写类HandlerSession,该类实现了接口IHttpHandler,IRequiresSessionState

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.SessionState;

namespace MyHandlerSession
{
    public class HandlerSession : IHttpHandler,IRequiresSessionState
    {
        Implementation of IHttpHandler#region Implementation of IHttpHandler
        /**//// <summary>
        /// http处理程序的核心。我们调用这个方法来处理http请求。
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest(HttpContext context)
        {
            HttpResponse objResponse = context.Response;
            HttpRequest objRequest = context.Request;

            HttpSessionState objSession = context.Session;
          
            objResponse.Write("<html><body><h1>欢迎使用自定义的HttpHandler!<br>");
            objSession["test"] = "Session测试<br>";
            objResponse.Write("Session的值为:" + objSession["Test"].ToString());
        }

        /**//// <summary>
        /// 我们调用这个属性来决定http处理程序的实例是否可以用于处理相同其它类型的请求。
        /// HTTP处理程序可以返回true或false来表明它们是否可以重复使用。
        /// </summary>
        public bool IsReusable
        {
            get
            {
                return true;
            }
        }
        #endregion
    }
}
 

2、新建一个项目,在Web.config文件中注册该类,并且在该项目的引用中添加MyHandlerSession.dll

在Web.config文件中添加:

      <httpHandlers>
        <add verb="*" path="*.apx"
               type="MyHandler.HandlerAPX,MyHandler" />

        <add verb="*" path="HttpModule.aspx"
       type="MyHandlerSession.HandlerSession,MyHandlerSession" />


      </httpHandlers>
 

说明当IIS识别到HttpModule.aspx文件时,就调用HandlerSession类来处理。但是如果是.apx文件时,就会调用HandlerAPX类来处理。

也就是说注册多个HttpHandler会覆盖的,这与HttpModule是不一样的。如果是对同一类文件注册了不同的HttpHandler,会执行最后一个。

即:如果Web.config配置为

      <httpHandlers>
        <add verb="*" path="*.apx"
               type="MyHandler.HandlerAPX,MyHandler" />

        <add verb="*" path="*.apx"
       type="MyHandlerSession.HandlerSession,MyHandlerSession" />


      </httpHandlers>
说明当IIS识别到*.apx文件时,就调用HandlerSession类来处理,而不是调用HandlerAPX类来处理。


三、ASP.NET事件模型机制
1、ASP.NET之所以对于以前的ASP是一个革命性的巨变,在很大程度上是由于ASP.NET技术是一种基于事件驱动的全新技术。
2、在ASP.NET中时间的触发和处理是在客户端和服务端进行的。
3、ASP.NET中,如果频繁和服务器进行事件信息传递,会大大降低服务器的处理效率和性能,因而有些事件如OnMouseOver没有提供;
4、但提供了Change事件,为了提高效率它们被缓存在客户端,等到再一次事件信息被发送到服务器端时一同发送回去。
如文本框的change事件,下拉框的change事件,
如两个控件的change事件中:

 

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Response.Write("DropDownList控件选择改变!<br>");
        }

        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            Response.Write("TextBox文本改变!<br>");
        }
如果控件本身的AutoPostBack设置为false(默认是false)时,文本框和下拉框发生改变时,不会执行change事件的,而是将事件信息缓存在客户端,当在页面上点击一个服务器端控件Button,

        protected void Button1_Click(object sender, System.EventArgs e)
        {
           Response.Write("点击了Button按钮!<br>");
        }
此时将客户端中的事件信息发送到服务器端,执行所有的事件,返回到客户端的信息为:
TextBox文本改变!
DropDownList控件选择改变!
点击了Button按钮!

 

掌握ASP.NET三层架构:增删改查操作实例分析 三层架构是一种常见的软件设计模式,它将应用程序分为三个逻辑层次:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data Access Layer)。每层都有其特定的功能和职责,彼此之间通过定义良好的接口进行交互。表现层:位于用户界面与应用系统之间,负责展示数据和接收用户的输入,是用户与系统交互的前端部分。业务逻辑层:位于表现层和数据访问层之间,是应用系统的核心部分,负责处理业务逻辑。数据访问层。 阅读详情

相关推荐

ASP.NET框架简要图解

此文档是本人在学习ASP.NET框架时总结的,希望对同道中人有所帮助。

ASP.NET 管道模型简析

你知道http请求是如何被我们应用程序处理? 你是否好奇在你使用的web框架中一个请求是如何到达你所指定的控制器? 那么好奇的你和好奇的我一起来学习探究吧! 什么是管道模型        首先有没有小伙伴思考过在.NET中WebForm、Mvc、Webapi 之类的框架做应用程序的开发部署之后,用户在浏览器或是利用HttpClient 输入URL地址请求之后是怎么到达我们的应用程序呢?中间又经

有梦想的鱼的博客 657

SSD性能测试进阶:用fio的io_uring引擎榨干你的NVMe硬盘

本文深入探讨了如何利用fio的io_uring引擎对NVMe SSD进行深度性能测试。通过对比传统libaio引擎,详解了io_uring低开销、高并发的优势。文章提供了从测试矩阵设计、队列深度分析到写入放大观察和尾延迟可视化的完整进阶方法,并附有实战案例与脚本,旨在帮助用户科学压榨NVMe硬盘的极限性能,获取更真实的评估数据。

weixin_29247219的博客 326

asp.net 三层架构

今天学习了asp.net 标准的三层架构,觉得与平时的设计思路类似,但是有一些借鉴的地方。 首先,看程序的框架图: 上图是我自己项目中,其实没有什么框架的东西,主要是将通用的类放在common文件夹中,实体类中实现属性的设置,get,set等以及数据库的sql语句的编写,例如: public string Url { get { return _...

weixin_33916256的博客 142

拌合楼管理软件开发(十一) 海康威视车牌识别摄像头安装调试,总算是跑通了。

/保存的文件个数这里之所以需要用到委托,直接更新textbox文本中的内容,以及复制picturebox的image会提示不是从齐创建的线程调用。

morsth的博客 4811

Python 使用Pygame库实现足球游戏:创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理

本文将介绍如何使用Python和Pygame库创建一个简单的足球游戏。我们将搭建一个基本的游戏环境,创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理。这个简单的足球游戏展示了Pygame的一些基本功能。虽然这是一个简单的游戏,但它包含了创建游戏循环、用户输入处理、物理模拟、碰撞检测等重要概念。

程序熊的博客 743

有关ASP.NET MVC框架的一些基础知识

长时间以来,MVC是一种为众多开发人员所熟悉的标准设计模式。本文介绍有关ASP.NET MVC框架的一些基础知识,针对ASP.NET 3.5。 MVC(模型—视图—控制器)结构模式把一个应用程序拆分成三个主要组件:模型、视图和控制器。在创建基于MVC框架的Web应用程序时,你可以把ASP.NET MVC框架作为ASP.NET Web表单模式方案的一种重要候选。较之于基于Web表单的应用程序,AS...

weixin_30319153的博客 394

保姆级教程:用xmir-patcher一键解锁Redmi AX3000路由器的SSH(附视频演示)

本文提供Redmi AX3000路由器SSH解锁的保姆级教程,详细介绍了使用xmir-patcher工具一键解锁SSH的步骤,包括环境搭建、工具获取、图形化操作详解及常见问题排查。解锁后,用户可通过SSH连接实现刷机、插件安装、网络优化等高级功能,提升路由器性能。

weixin_29216049的博客 723

告别表格管理客户:低代码搭建CRM系统实战指南

客户关系管理(CRM)的核心在于通过结构化数据模型与自动化流程,解决表格管理带来的数据冗余、权限失控与跟进遗漏问题。其原理是借助低代码平台的多表关联、行级权限和自动化引擎,构建以客户为中心的数据闭环。技术价值在于将被动记录转为主动驱动,提升销售过程量与转化率。典型应用场景包括中小销售团队的线索分配、商机推进与回款提醒。本文围绕客户表、商机表、跟进记录表的设计,以及五个必配自动化流程与三张核心报表,提供了一套可快速落地的低成本方案。

weixin_33910137的博客 268

如何使用 Claude Code 搜索 SAP note

当然,Claude Code 自己仍然要有一种合法可用的模型访问方式,例如 Claude 订阅、Anthropic API 或公司配置的模型提供方式,这和 Browser Extension 是两个问题。因为 Claude Code 已经是完整的 MCP Host,而 Microsoft Playwright MCP 又已经明确支持现有 Chrome Session,两者拼起来在技术架构上完全成立。Microsoft Playwright MCP 默认可以创建持久化浏览器 Profile。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 62

记录:解决Ubuntu20.04安装ros报错E: Unable to locate package ros-kinetic-desktop-full【亲测有效】

报错:E: Unable to locate package ros-kinetic-desktop-full.尝试好久一直都无法下载,最后得知真相的我眼泪哗哗的直流。

**My Coding Family** 6万+

asp.net mvc如何通过原理分析优化大文件传输架构?

永远不要在需求评审时说"这个简单"信创浏览器是检验真爱的新标准10G文件上传前记得清理C盘QQ群红包可能是新型庞氏骗局(但我还是想要)(真诚求工作推荐,会修打印机,能装Windows 7那种)

2501_90646763的博客 1022

lammps 案例:高熵合金FeNiCrCoCu建模及拉伸模拟

高熵合金力学性能模拟包括拉伸、剪切、摩擦等模拟,本文以高熵合金FeNiCrCoCu为例介绍高熵合金建模及拉伸过程模拟。 FeNiCrCoCu原子数量比为1:1:1:1:1 高熵合金的拉伸与单晶拉伸过程类似,主要包含以下步骤: 1.建模 高熵合金含有原子类型较多,建模时,一般以含量最多的原子为主建立初始模型。 使用set type/ratio或者set type/fraction的方式按一定比例替换为其它合金原子。 如随机选择20%的原子1,将其转换为原子2: set type 1 type/ratio 2

lammps_jiayou的博客 6067

转载 ASP.NET架构分析

一、ASP.NET工作原理: 首先通过一个图来了解一下ASP.NET工作原理, 图一 ASP.NET工作原理 通过该图的顺序我们可以看到ASP.NET是如何工作的,可以看到客户端和服务器端是如何交互的。看到客户端是如何请求服务器,服务器接受到客户端请求后,是如何处理请求的,并将处理结果返回给客户端的。 需要...

weixin_30684743的博客 98

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ASP.NET三层架构的分析

BLL 是业务逻辑层 Business Logic Layer DAL 是数据访问层 Data Access Layer ASP.NET的三层架构(DAL,BLL,UI) 图形表示三层结构.其中web即为USL层 web –> bll –> dal| |...

weixin_30462049的博客 115

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

微软Asp.Net架构与项目团队管理建设模型分析

Microsoft Visual Studio 2008 RTM版本已经发布好久了,最近的项目准备用最新的微软技术Microsoft Visual Studio 2008 RTM +Microsoft SQL Server Compact 3.5+Microsoft SQL Server 2005模型来实现;好的Team应该有学习新技术的探 索精神, 一个好的管理者,作用和能力不

687

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

(转)ASP.NET架构分析

最近听了微软讲师邵志东的讲座“深入解析ASP.NET架构”的视频讲座,我觉得对ASP.NET架构有一定的认识,现在对讲座做一点总结,以及发表我对ASP.NET架构相关知识的自身理解,如有不妥之处,希望各位同仁不吝指出! 一、ASP.NET工作原理: 首先通过一个图来了解一下ASP.NET工作原理, 图一 ...

weixin_30878361的博客 69

北京上市公司招聘.net架构师及开发人员

 架构分析师:(1人)要求:6年以上工作经验,3年以上架构师经验,精通UML,精通设计模式,具有非常强的面向对象功力,深厚的数据库设计功底,有一定的业务分析能力,有一定的文档书写能力,熟悉.net开发,熟悉ASP.NET,熟悉SQLServer,较强的沟通能力,有团队精神,有一定的管理经验,能适应敏捷开发,了解msf,xp等开发过程,对新技术敏感,有较强的学习能力,拥有产品开发经验,拥有千

方明的专栏 2125
上一篇: ASP.NET架构分析
下一篇: 页面状态加载....
jackeyabc
博客等级 码龄20年 71粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值