热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WF4.0实战(十八):模拟asp.net生命周期

概述:大多数.net程序员都熟悉:浏览器向iis服务器发送一个请求,会发生一些什么事情。今天,我将使用WFWCF模拟一下整个

概述:  

    大多数.net程序员都熟悉:浏览器向iis服务器发送一个请求,会发生一些什么事情。今天,我将使用WF+WCF模拟一下整个处理过程。当然这里只是模拟,与实际还是有差距的,如果叙述的有问题,请指出。主要是为了说明:用流程的视觉去看待asp.net请求处理过程,你会发现它其实不难。好了,还是照旧,先看效果,在说如何实现,最后总结,附代码下载。

    对于一个来自客户端的请求,我将iis的处理总结为两个流程

    1、创建Asp.net环境(如果是第一次请求)

    2、使用MHPM处理请求(M:HttpModule、H:HttpHandler、P:Asp.net Page、M:HttpModule)

    模拟的原型是:一个aspx页面上有一个button,点击这个button去请求iis服务

    模拟的实际是:一个wpf窗体上有一个button,点击这个button去调用一个服务端的WCF服务,这个服务里面包含了模拟asp.net生命周期的wf流程,这个wcf服务返回MHPM处理请求的步骤。

    1、在服务端创建一个文本文件,来模拟iis创建asp.net环境。

    2、使用一个顺序工作流来模拟MHPM事件处理请求,并将处理步骤返回给客户端。本来想返回一段html脚本的,打算以后完善吧。

效果:

    1、模拟的处理结果:在wpf页面上输出处理的步骤。

aspx

    2、在服务端模拟iis创建一个asp.net宿主环境:模拟为将创建的步骤写在一个文本文件中。

aspx2

 

实现:

这个流程处理比较大,我分几个步说明:

    1、先看整个大流程,和我之前说的一样分了两个流程去处理,一个为flowchart,一个是顺序工作流,如下图:

aspx3

    2、看下创建Asp.net环境的flowchart,双击进去查看,如下图:

aspx4

    上图可以很清楚地看出来,首先检查请求页面的后缀名,根据后缀名确定处理的dll,看是否能处理这个请求,例如如果是aspx,将请求传递‘aspnet_isapi.dll’处理。接着判断是否是第一次请求,如果是第一次请求,使用ApplicationManager类创建运行站点的应用程序域。这个应用程序域用来区别同一个iis上的不同asp.net应用程序的环境。这个应用程序域会创建HttpRuntime对象等来构建宿主环境。这个宿主环境紧接着会创建‘HttpContext’ , ‘HttpRequest’ 和‘HttpResponse’等对象。如果是第一次请求还要创建一个HttpApplication,并将HttpApplication分配给‘HttpContext’ 等对象。如果不是第一次,可以从处理池中取HttpApplication。最后将这个请求交给HttpApplication处理。详见msdn。

    3、使用MHPM处理请求,这个流程也很长,分四步查看,整个流程如下图,两个HttpModule、一个HttpHandler、和一个Asp.net Page:

aspx5

    3.1     第一个HttpModule,如下图:

aspx6 

    3.2     HttpHandler

aspx7

    3.3     ASP.NET Page页面生命周期:

aspx8

    3.4     第二个HttpModule,如下图:

aspx9 

 

总结:

         asp.net请求处理就是一个流程,故我使用了wf去模拟这个流程,我将这个流程宿主在wcf中来模拟将asp.net应用程序宿主在iis中。

         这篇文章其实能说很多很多,asp.net的每个处理步骤都有很多东西,我一时很难说清楚,所以画了这么一个流程来帮助自己理解,后来就写了这篇文章,希望对您也有帮助。如果您对文章有意见和见解,请给我留言,谢谢。

代码:http://files.cnblogs.com/zhuqil/wfaspdotnetpagelifecycle.rar



(全文完)


以下为广告部分

您部署的HTTPS网站安全吗?

如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!

SSL检测评估

快速了解HTTPS网站安全情况。

安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。

SSL证书工具

安装部署SSL证书变得更方便。

SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。

SSL漏洞检测

让服务器远离SSL证书漏洞侵扰

TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。




推荐阅读
  • 本文详细介绍了如何在不同操作系统中设置 Node.js 的环境变量,包括通过命令行、npm 脚本以及直接在代码中设置的方法。 ... [详细]
  • 本文探讨了Flutter和Angular这两个流行框架的主要区别,包括它们的设计理念、适用场景及技术实现。 ... [详细]
  • 使用EF Core在.Net Core控制台应用中操作SQLite数据库
    本文介绍如何利用Visual Studio 2019和Windows 10环境,通过Entity Framework Core(EF Core)实现对SQLite数据库的读写操作。项目源代码可从百度网盘下载。 ... [详细]
  • 深入解析 Zend Guard 4 功能与配置
    本文旨在通过图文并茂的方式详细介绍 Zend Guard 4 的核心功能及其配置方法,特别适合英文阅读能力有限的技术人员。文中不仅提供了详细的步骤说明,还附带了实际操作中的注意事项,帮助读者更好地理解和应用这一工具。 ... [详细]
  • 重新审视Kubernetes的必要性
    近期,我注意到不少人误以为我是Kubernetes的推广者。实际上,我只是分享了一些适合用Kubernetes解决的案例。本文旨在探讨Kubernetes的适用场景,并提供一些替代方案。 ... [详细]
  • 优雅地记录API调用时长
    本文旨在探讨如何高效且优雅地记录API接口的调用时长,通过实际案例和代码示例,帮助开发者理解并实施这一技术,提高系统的可观测性和调试效率。 ... [详细]
  • 深入解析Nacos服务自动注册机制
    本文将探讨Nacos服务自动注册的具体实现方法,特别是如何通过Spring事件机制完成服务注册。通过对Nacos源码的详细分析,帮助读者理解其背后的原理。 ... [详细]
  • 这个报错出现在userDao里面,sessionfactory没有注入。解决办法:spring整合Hibernate使用test测试时要把spring.xml和spring-hib ... [详细]
  • 匠心|传统_2021年度总结 | 葡萄城软件开发技术回顾(上)
    匠心|传统_2021年度总结 | 葡萄城软件开发技术回顾(上) ... [详细]
  • 深入解析C++ Atomic编程中的内存顺序
    在多线程环境中,为了防止多个线程同时修改同一数据导致的竞争条件,通常会使用内核级同步对象,如事件、互斥锁和信号量等。然而,这些方法往往伴随着高昂的上下文切换成本。本文将探讨如何利用C++11中的原子操作和内存顺序来优化多线程编程,减少不必要的开销。 ... [详细]
  • Redis: 高效的键值存储系统
    Redis是一款遵循BSD许可的开源高性能键值存储系统,它不仅支持多种数据类型的存储,还提供了数据持久化和复制等功能,显著区别于其他键值缓存解决方案。 ... [详细]
  • 本文详细介绍了Objective-C中的面向对象编程概念,重点探讨了类的定义、方法的实现、对象的创建与销毁等内容,旨在帮助开发者更好地理解和应用Objective-C的面向对象特性。 ... [详细]
  • 现在的新手程序猿,动不动就是框架,就连外面培训的也是框架,我就问一句,没了框架是不是就啥也不会了 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • 本文详细介绍了如何在Windows和Linux系统上配置Openfire服务器,包括安装步骤、数据库配置及端口映射等关键环节。 ... [详细]
author-avatar
华力
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有