IIS的工作原理的疑问

zhaoyabin 2012-10-30 12:35:24
本人刚刚从事asp.net开发,但是对IIS的工作原理还存在着一些疑问,特请教群里高手们:
1.在IIS7.0的网站管理里面,右键网站有个高级设置,里面有个最大并发数,这里的并发数指的是什么,因为所以的请求都会先经过http.sys处理,这里可不可以理解为http.sys在某一时刻所能承受的并发数?
2.一个应用程序池中可以包含多个站点,当http.sys接收到客户端的请求的时候,会选择对应的应用程序池,http.sys是否是单线程工作,如果是单线程工作,在网站访问量大的情况下是否会出现瓶颈问题?(因为我想http.sys也要做一些判断处理,性能肯定会有损耗)
3. http.sys会接收客户端的请求,会根据请求,选择对应的应用程序池,会将请求放在应用程序池的队列中去,默认的IIS7.0的队列长度是1000,这里的队列程序和前面提到的并发数之间是什么关系,应用程序池对应一个工作者进程,所有的处理都会在这里进行,会对不同的资源请求作出不同的相应,如果是asp.net,就会加载ISAPI,进而加载CLR,而CLR会创建APPDomain,然后开始处理请求,HttpRuntime>httpApplicationFactory>HttpAlication>,这是第一个请求做做的事情,我的问题是当第二个请求过来的时候,IIS会做哪些事情,w3wp是不是多线程运行的,如果是,线程池是多大,如何设置,怎么设置最合理,第二个asp.net请求过来的时候,会不会重复的去加载ISAPI,并行处理是怎么做的。
4.IIS6.0应用程序池里面有个资源回收,这里的回收,是回收w3wp的资源吗,具体的要回收哪些资源,为什么要回收,在我看来w3wp就是一个请求线程池,来循环的接收请求。

以上问题可能会问的比较怪,大家都什么高见,尽情发表吧。
...全文
418 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈尔滨-猫猫 2014-04-11
  • 打赏
  • 举报
回复
首先,你问的这些问题并不奇怪。别人没有问或者没有研究过这些问题,是因为大部分程序员以完成功能为主。能提出这些问题的人,我相信日后必能成为一名合格甚至优秀的程序员(注:不是某语言程序员)。 其次,目前来说,你这些问题我不一定都能回答正确,但有幸的是,我跟你一样,在能实现功能的情况下,我非常乐意研究其实现原理,以及实现细节,针对你的问题,我可以做一些自己的理解,有些问题,是我曾在调试ISAPI扩展遇到的,可以肯定的地方,我会加上标注,个人推测的结论也会加上标注,这些东西即便别人说出来了,自己体会依然不是很深刻,还望以后自己能亲自调试,去总结你这些问题的答案。废话不多说了,接下来回答问题。 1.所有的http请求,到达服务器上时,http.sys驱动最先负责处理这个请求,这个东西的最大并发数,如果可以设置,那这个设置选项的意思就是,你当前的服务器上的所有站点加一起,所能承担的最大并发数量。而你的设置,是在站点的属性中设置,所以你问的这个最大并发数,是站点的,而不是全局的。(此问题为个人推测) 2.http.sys是否是单线程,这个并不重要。但可以肯定的一点是,这个驱动在网络层处理http请求,性能是不用怀疑的,但我猜测其内部应该为多线程,但多线程也要有个数量,2个?3个?200个?300个?都可以叫做多线程,在windows下众多网络模型中,IOCP性能最高,我猜测这个驱动应该使用的是IOCP模型,这种模型下,并不需要很多个线程,顶多是cpu核心数目x2个工作者线程。这一部分如想深究,可以研究一下IOCP模型吧。另外,内核中,并不是线程数量越多,效率越高,通常驱动编程中,很少大批量创建线程。所以,目测这个驱动中的线程数为2--10个这个样子。具体的应该有工具可以看到,比如XueTr、PC Hunter之类的工具,也可以试试看。 3.第一,队列程序为保存当前没有被处理的http请求,待iis的进程池中有空闲的进程可以处理http请求时,会从这个队列里拿过一个请求进行处理,一般进程池大小也就是w3wp.exe进程的数量,由于w3wp.exe进程内是多线程处理,具体处理请求时,一个进程可以处理n个站点上来到的http请求,但这样很不合理,所以进程池大小通常不会设置为1。这个东西设置为多少,需要根据站点的访问情况酌情设置。 第二,w3wp.exe处理http请求时,只能处理静态内容的请求,比如访问一个txt或html文件,这个进程处理后,就可以把结果给http.sys,然后http.sys把数据发送给请求的浏览器,对于aspx等类型的动态内容,w3wp.exe进程从符号映射表(什么类型的文件,由哪个ISAPI扩展程序处理)中找到处理程序,把这次请求,让这个程序处理,这个程序处理完再传递给w3wp.exe,之后就是给http.sys然后发回客户端。如你问题中所说,asp.net_isapi.dll就是处理aspx类型文件的ISAPI扩展程序了。说到这里,其实可以大言不惭的说,我们可以自己创建一个ISAPI扩展,然后自己发明一种脚本语法,用自己的ISAPI扩展去解析这个脚本语法,这样,你也就创造了一种web服务器端脚本语言。 第三,ISAPI扩展,通常在iis服务启动后,第一次http请求到来时,加载ISAPI扩展,一定时间内,这个ISAPI扩展是不会被卸载的,但是如果很长时间没有任何http请求,iis主进程会释放掉ISAPI扩展的。(但设置了“缓存ISAPI扩展”的话,ISAPI扩展到iis服务停止前是不会被卸载的)所以,ISAPI扩展是不会被频繁加载和卸载的。而且http.sys中还有缓存机制,对于短时间内的多次同样的http请求,iis可能会用之前的请求处理结果直接回复给客户端浏览器,对于这一点,在我调试ISAPI的时候,深受其害啊。修改了扩展,但修改的部分没有实时生效,被迫重启iis。 4.这个资源回收!=程序语言垃圾回收,而是对进程池中进程资源的回收。在很多种情况下,比如一个http请求在被处理的时候,由于其所使用的ISAPI扩展程序出现bug或者死锁,iis主服务会再次启动一个w3wp.exe进程去处理后来的http请求,这样无限启动下去,直到启动到进程池大小数量个w3wp.exe个进程。如果此后再有请求,那么iis会给出一个很sorry的应答:“Service Unavailable”。到这里,我们应该知道那个回收资源是干什么的了,如果iis主进程发现有很多个w3wp.exe已经挂掉,不再具备处理请求的能力,而这个进程如果还继续存在的话,就会占用进程池中的名额,对于这种已经死掉的进程,iis会主动杀掉,已恢复进程池中,可用进程数量。 以上仅仅是个人观点,如有不同意见,欢迎大家批评指正。
mizuho_2006 2012-10-31
  • 打赏
  • 举报
回复
建议看一下邹华栋老师的视频,服务器如何响应客户端的请求,页面生命周期的过程,服务端如何生成客户端控件树,什么时候调用哪个类的什么方法,讲解都很详细。
net5354 2012-10-31
  • 打赏
  • 举报
回复
如果懂的话,都去开发操作系统了
zhaoyabin 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

1.在IIS7.0的网站管理里面,右键网站有个高级设置,里面有个最大并发数,这里的并发数指的是什么,因为所以的请求都会先经过http.sys处理,这里可不可以理解为http.sys在某一时刻所能承受的并发数?

应该是允许同时维持会话的个数,当一个客户端开启多个浏览器的时候,连接数甚至少于连接的客户端数量。

2.一个应用程序池中可以包含多个站点,当http.sys接收到客户端的……
[/Quote]

IIS的线程池有多大?是否可以调整,当第二次请求的时候 ,IIS会怎么做
XBodhi. 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

建议看一下邹华栋老师的视频,服务器如何响应客户端的请求,页面生命周期的过程,服务端如何生成客户端控件树,什么时候调用哪个类的什么方法,讲解都很详细。
[/Quote]

顶。
devmiao 2012-10-30
  • 打赏
  • 举报
回复
1.在IIS7.0的网站管理里面,右键网站有个高级设置,里面有个最大并发数,这里的并发数指的是什么,因为所以的请求都会先经过http.sys处理,这里可不可以理解为http.sys在某一时刻所能承受的并发数?

应该是允许同时维持会话的个数,当一个客户端开启多个浏览器的时候,连接数甚至少于连接的客户端数量。

2.一个应用程序池中可以包含多个站点,当http.sys接收到客户端的请求的时候,会选择对应的应用程序池,http.sys是否是单线程工作,如果是单线程工作,在网站访问量大的情况下是否会出现瓶颈问题?(因为我想http.sys也要做一些判断处理,性能肯定会有损耗)

不会,和线程没有关系。

3. http.sys会接收客户端的请求,会根据请求,选择对应的应用程序池,会将请求放在应用程序池的队列中去,默认的IIS7.0的队列长度是1000,这里的队列程序和前面提到的并发数之间是什么关系,应用程序池对应一个工作者进程,所有的处理都会在这里进行,会对不同的资源请求作出不同的相应,如果是asp.net,就会加载ISAPI,进而加载CLR,而CLR会创建APPDomain,然后开始处理请求,HttpRuntime>httpApplicationFactory>HttpAlication>,这是第一个请求做做的事情,我的问题是当第二个请求过来的时候,IIS会做哪些事情,w3wp是不是多线程运行的,如果是,线程池是多大,如何设置,怎么设置最合理,第二个asp.net请求过来的时候,会不会重复的去加载ISAPI,并行处理是怎么做的。

会使用线程池,一般自动管理就可以了。

4.IIS6.0应用程序池里面有个资源回收,这里的回收,是回收w3wp的资源吗,具体的要回收哪些资源,为什么要回收,在我看来w3wp就是一个请求线程池,来循环的接收请求。

一个应用程序池代表一个进程。
作为初学入门选择方向的好教材 许多技术人员在面对.NET Framework 3.0/3.5大量的新知识、新技术的时候感到彷徨,对自己现有的技术知识是否过时会产生疑问,对新技术会产生抵触的情绪,其实,只要能学习到真正代表业界趋势的技术,花不太多的时间掌握新技术,乐趣就会随之产生。编写本书的一个目的就是要让读者认识到.NET 3.5相关的新知识都是基于现有技术的,体会、掌握并应用这些新技术并不是难事。 本书全面讲解了.NET Framework 3.5开发中各方面的技术要点,共分19章。本书没有对各个功能的工作原理进行深入的揭示,而是采用“知识进述”+“代码示例”的方式,让读者可以快速体验并掌握.NETFramework 3.5的开发方法。 本书适合从事各利.NET程序开发的人员阅读。通过不同层次的例子,相信可以让读者理解、掌握,NET程序开发,特别是关于WPF、wcF和WF这3种重要框架的应用所要掌握的知识。 第1章 .NETFramework3.5简介 1 中文名: .NETFramework3.5开发技术详解 作者: 王毅.图书分类: 计算机与网络 资源格式: PDF 版本: 2009 出版社: 人民邮电出版社.书号: 9787115190918.发行时间: 2009年 地区: 大陆 语言: 简体中文 简介: 1.1 .NETFramework3.5在.NET技术体系中的位置 1 1.2 .NET3.5各部分的功能 2 1.3 .NET3.5的组件 3 1.3.1 WindowsPresentaionFoundation(WPF) 3 1.3.2 WindowsCommunicationFoundation(WCF) 5 1.3.3 WorkflowFoundation(WF) 6 1.4 搭建.NET3.5的开发环境 6 1.4.1 在WindowsXP/2003/Vista上搭建开发环境 6 1.4.2 相关工具 9 第2章 .NET3.5的新功能 12 2.1 .NET3.5概要 12 2.2 新的.NET基础类型 12 2.3 C#语言的强化 14 2.3.1 C#基本语法增强 14 2.3.2 LINQ(集成语言查询) 16 第3章 WindowsPresentationFoundation基础知识 34 3.1 WindowsPresentationFoundation(WPF)的概念 34 3.2 XAML的概念 35 3.2.1 命名空间 36 3.2.2 代码后置文件 37 3.2.3 调用.NET类库中的类来定义对象 37 3.2.4 属性 38 3.3 WPF的结构和相关的类库 39 3.4 WPF应用程序的类型 44 3.4.1 传统类型的视窗程序 44 3.5 创建第一个WPF程序 49 第4章 WPF程序的布局 59 4.1 布局的基础知识 59 4.2 StackPanel容器 61 4.3 DockPanel容器 65 4.4 Grid容器 67 4.4.1 表格的高度和宽度 69 4.4.2 ColumnSpan和RowSpan 70 4.4.3 Grid的SharedSizeGroup 71 4.5 Canvas容器 72 4.6 文档布局 74 4.6.1 WrapPanel 74 4.6.2 TextBlock 75 4.6.3 FlowDocument 78 4.7 其他容器 83 4.8 视图控制 84 4.9 自定义布局 87 第5章 WPF的控件 91 5.1 控件模型 91 5.2 WPF的控件树 92 5.3 路由事件 95 5.4 从属属性(DependencyProperty) 97 5.5 处理交互行为 102 5.6 基本控件的使用 106 5.6.1 Button控件 106 5.6.2 TextBox类控件 109 5.6.3 列表控件 113 5.6.4 Menu控件 118 5.6.5 包容式控件 121 5.6.6 Label和TextBlock 126 5.6.7 其他控件 127 第6章 资源和数据绑定 134 6.1 在WPF中定义资源 134 6.1.1 WPF中的嵌入式资源 134 6.1.2 定义逻辑资源 135 6.2 使用资源 139 6.3 数据绑定基础 142 6.4 集合的绑定 151 6.5 DataProvider 157 6.6 高级数据绑定操作 165 6.7 使用CollectionViewSource进行排序和过滤 167 第7章 让WPF程序支持样式和主题 169 7.1 样式基础 169 7.1.1 WPF样式的定义 169 7.1.2 样式的作用 170 7.1.3 样式的作用范围 171 7.2 内联样式 172 7.3 命名样式 172 7.4 样式触发器 174 7.5 控件模板 180 7.6 主题 182 第8章 WPF的绘图功能 189 8.1 2D图形基础 189 8.2 2D几何图形 190 8.3 画刷和画笔 197 8.3.1 画刷 197 8.3.2 画笔 204 8.4 2D图形变换(Transform) 205 8.4.1 平移变换 205 8.4.2 缩放变换 206 8.4.3 旋转变换 206 8.4.4 斜移变换 207 8.4.5 矩阵变换 207 8.4.6 变换组(TransformGroup) 210 8.5 2D图形特效 210 8.6 3D图形基础 213 8.6.1 计算机图形学基础 213 8.6.2 WPF的3D类型 215 8.7 3D变换 218 8.8 WPF的动画支持 221 8.8.1 Animation对象 222 8.8.2 第一个动画 223 第9章 WPF的多媒体 230 9.1 对视频和音频的支持 230 9.1.1 视频支持 230 9.1.2 音频支持 235 9.2 语音功能 238 第10章 WPF高级技术 241 10.1 WPF自定义控件 241 10.1.1 编写控件的基础知识 241 10.1.2 开始编写控件 244 10.1.3 编写CustomControl控件 249 10.2 WPF的互操作性 252 10.2.1 在WPF中使用Winform控件 252 10.2.2 在WInform程序中使用WPF控件 254 10.3 WPF的异步模型 254 10.4 WPF对自动化程序的支持 256 10.4.1 Automation树 256 10.4.2 控件的访问方式 257 第11章 WindowsCommunicationFoundation(WCF)基础 261 11.1 面向服务编程模型(框架) 261 11.1.1 什么是SOA 261 11.1.2 为什么要使用SOA 263 11.2 WCF是什么 264 11.3 WCF的结构 265 11.4 WCF基础 267 第12章 WCF中的契约 268 12.1 服务契约和操作契约 268 12.2 数据契约(DataContract) 269 12.3 错误契约(FaultContract) 272 12.4 创建WCF服务 273 12.5 编写WCF客户端 277 12.6 配置WCF程序 279 12.6.1 服务端配置 279 12.6.2 客户端配置 283 12.6.3 配置工具 284 第13章 WCF中的消息交换 285 13.1 与通信有关的概念 285 13.1.1 Address(地址) 285 13.1.2 Bindings(通信绑定) 286 13.1.3 Contracts(契约) 288 13.1.4 EndPoint 292 13.2 远程对象的传递 293 13.3 大对象的传递 299 13.4 错误处理 303 13.5 会话管理 308 13.6 双向通信 311 13.7 WCF的消息编码 318 13.8 基于队列的消息交换 319 13.9 点对点网络(Peer-To-PeerNetwork) 322 第14章 并发管理 327 14.1 服务器实例行为管理 327 14.2 并发管理 330 14.3 同步上下文 332 14.4 回调的同步设置和异步调用 334 第15章 WCF的事务支持 341 15.1 事务概要 341 15.2 WCF中的事务 343 15.3 创建支持事务的服务 345 第16章 WCF的安全解决方案 353 16.1 认证和授权 353 16.1.1 认证 354 16.1.2 授权 355 16.2 安全传输 360 16.2.1 传输的安全性 360 16.2.2 消息安全 363 16.3 安全策略 364 第17章 WCF的扩展性 368 17.1 服务行为的扩展 368 17.1.1 自定义分发器特性 369 17.2 自定义通道 374 17.3 自定义元数据 378 17.3.1 元数据的基本知识 378 17.3.2 扩展元数据系统 379 17.4 自定义序列化 380 第18章 WCF的运行环境 383 18.1 在IIS上启用WCF服务 383 18.2 在.NET程序中运行WCF服务 386 18.3 在Windows服务程序中运行WCF服务 387 第19章 工作流(WorkFlow) 392 19.1 工作流(WF)简介 392 19.1.1 工作流的概念 392 19.1.2 WindowsWorkFlowFoundation 393 19.2 Activity(活动) 396 19.3 WF运行时 401 19.4 基于状态机的工作流 405 19.5 工作流的持久化 406 19.6 工作流的XAML表示 407
作为初学入门选择方向的好教材 许多技术人员在面对.NET Framework 3.0/3.5大量的新知识、新技术的时候感到彷徨,对自己现有的技术知识是否过时会产生疑问,对新技术会产生抵触的情绪,其实,只要能学习到真正代表业界趋势的技术,花不太多的时间掌握新技术,乐趣就会随之产生。编写本书的一个目的就是要让读者认识到.NET 3.5相关的新知识都是基于现有技术的,体会、掌握并应用这些新技术并不是难事。 本书全面讲解了.NET Framework 3.5开发中各方面的技术要点,共分19章。本书没有对各个功能的工作原理进行深入的揭示,而是采用“知识进述”+“代码示例”的方式,让读者可以快速体验并掌握.NETFramework 3.5的开发方法。 本书适合从事各利.NET程序开发的人员阅读。通过不同层次的例子,相信可以让读者理解、掌握,NET程序开发,特别是关于WPF、wcF和WF这3种重要框架的应用所要掌握的知识。 第1章 .NETFramework3.5简介 1 中文名: .NETFramework3.5开发技术详解 作者: 王毅.图书分类: 计算机与网络 资源格式: PDF 版本: 2009 出版社: 人民邮电出版社.书号: 9787115190918.发行时间: 2009年 地区: 大陆 语言: 简体中文 简介: 1.1 .NETFramework3.5在.NET技术体系中的位置 1 1.2 .NET3.5各部分的功能 2 1.3 .NET3.5的组件 3 1.3.1 WindowsPresentaionFoundation(WPF) 3 1.3.2 WindowsCommunicationFoundation(WCF) 5 1.3.3 WorkflowFoundation(WF) 6 1.4 搭建.NET3.5的开发环境 6 1.4.1 在WindowsXP/2003/Vista上搭建开发环境 6 1.4.2 相关工具 9 第2章 .NET3.5的新功能 12 2.1 .NET3.5概要 12 2.2 新的.NET基础类型 12 2.3 C#语言的强化 14 2.3.1 C#基本语法增强 14 2.3.2 LINQ(集成语言查询) 16 第3章 WindowsPresentationFoundation基础知识 34 3.1 WindowsPresentationFoundation(WPF)的概念 34 3.2 XAML的概念 35 3.2.1 命名空间 36 3.2.2 代码后置文件 37 3.2.3 调用.NET类库中的类来定义对象 37 3.2.4 属性 38 3.3 WPF的结构和相关的类库 39 3.4 WPF应用程序的类型 44 3.4.1 传统类型的视窗程序 44 3.5 创建第一个WPF程序 49 第4章 WPF程序的布局 59 4.1 布局的基础知识 59 4.2 StackPanel容器 61 4.3 DockPanel容器 65 4.4 Grid容器 67 4.4.1 表格的高度和宽度 69 4.4.2 ColumnSpan和RowSpan 70 4.4.3 Grid的SharedSizeGroup 71 4.5 Canvas容器 72 4.6 文档布局 74 4.6.1 WrapPanel 74 4.6.2 TextBlock 75 4.6.3 FlowDocument 78 4.7 其他容器 83 4.8 视图控制 84 4.9 自定义布局 87 第5章 WPF的控件 91 5.1 控件模型 91 5.2 WPF的控件树 92 5.3 路由事件 95 5.4 从属属性(DependencyProperty) 97 5.5 处理交互行为 102 5.6 基本控件的使用 106 5.6.1 Button控件 106 5.6.2 TextBox类控件 109 5.6.3 列表控件 113 5.6.4 Menu控件 118 5.6.5 包容式控件 121 5.6.6 Label和TextBlock 126 5.6.7 其他控件 127 第6章 资源和数据绑定 134 6.1 在WPF中定义资源 134 6.1.1 WPF中的嵌入式资源 134 6.1.2 定义逻辑资源 135 6.2 使用资源 139 6.3 数据绑定基础 142 6.4 集合的绑定 151 6.5 DataProvider 157 6.6 高级数据绑定操作 165 6.7 使用CollectionViewSource进行排序和过滤 167 第7章 让WPF程序支持样式和主题 169 7.1 样式基础 169 7.1.1 WPF样式的定义 169 7.1.2 样式的作用 170 7.1.3 样式的作用范围 171 7.2 内联样式 172 7.3 命名样式 172 7.4 样式触发器 174 7.5 控件模板 180 7.6 主题 182 第8章 WPF的绘图功能 189 8.1 2D图形基础 189 8.2 2D几何图形 190 8.3 画刷和画笔 197 8.3.1 画刷 197 8.3.2 画笔 204 8.4 2D图形变换(Transform) 205 8.4.1 平移变换 205 8.4.2 缩放变换 206 8.4.3 旋转变换 206 8.4.4 斜移变换 207 8.4.5 矩阵变换 207 8.4.6 变换组(TransformGroup) 210 8.5 2D图形特效 210 8.6 3D图形基础 213 8.6.1 计算机图形学基础 213 8.6.2 WPF的3D类型 215 8.7 3D变换 218 8.8 WPF的动画支持 221 8.8.1 Animation对象 222 8.8.2 第一个动画 223 第9章 WPF的多媒体 230 9.1 对视频和音频的支持 230 9.1.1 视频支持 230 9.1.2 音频支持 235 9.2 语音功能 238 第10章 WPF高级技术 241 10.1 WPF自定义控件 241 10.1.1 编写控件的基础知识 241 10.1.2 开始编写控件 244 10.1.3 编写CustomControl控件 249 10.2 WPF的互操作性 252 10.2.1 在WPF中使用Winform控件 252 10.2.2 在WInform程序中使用WPF控件 254 10.3 WPF的异步模型 254 10.4 WPF对自动化程序的支持 256 10.4.1 Automation树 256 10.4.2 控件的访问方式 257 第11章 WindowsCommunicationFoundation(WCF)基础 261 11.1 面向服务编程模型(框架) 261 11.1.1 什么是SOA 261 11.1.2 为什么要使用SOA 263 11.2 WCF是什么 264 11.3 WCF的结构 265 11.4 WCF基础 267 第12章 WCF中的契约 268 12.1 服务契约和操作契约 268 12.2 数据契约(DataContract) 269 12.3 错误契约(FaultContract) 272 12.4 创建WCF服务 273 12.5 编写WCF客户端 277 12.6 配置WCF程序 279 12.6.1 服务端配置 279 12.6.2 客户端配置 283 12.6.3 配置工具 284 第13章 WCF中的消息交换 285 13.1 与通信有关的概念 285 13.1.1 Address(地址) 285 13.1.2 Bindings(通信绑定) 286 13.1.3 Contracts(契约) 288 13.1.4 EndPoint 292 13.2 远程对象的传递 293 13.3 大对象的传递 299 13.4 错误处理 303 13.5 会话管理 308 13.6 双向通信 311 13.7 WCF的消息编码 318 13.8 基于队列的消息交换 319 13.9 点对点网络(Peer-To-PeerNetwork) 322 第14章 并发管理 327 14.1 服务器实例行为管理 327 14.2 并发管理 330 14.3 同步上下文 332 14.4 回调的同步设置和异步调用 334 第15章 WCF的事务支持 341 15.1 事务概要 341 15.2 WCF中的事务 343 15.3 创建支持事务的服务 345 第16章 WCF的安全解决方案 353 16.1 认证和授权 353 16.1.1 认证 354 16.1.2 授权 355 16.2 安全传输 360 16.2.1 传输的安全性 360 16.2.2 消息安全 363 16.3 安全策略 364 第17章 WCF的扩展性 368 17.1 服务行为的扩展 368 17.1.1 自定义分发器特性 369 17.2 自定义通道 374 17.3 自定义元数据 378 17.3.1 元数据的基本知识 378 17.3.2 扩展元数据系统 379 17.4 自定义序列化 380 第18章 WCF的运行环境 383 18.1 在IIS上启用WCF服务 383 18.2 在.NET程序中运行WCF服务 386 18.3 在Windows服务程序中运行WCF服务 387 第19章 工作流(WorkFlow) 392 19.1 工作流(WF)简介 392 19.1.1 工作流的概念 392 19.1.2 WindowsWorkFlowFoundation 393 19.2 Activity(活动) 396 19.3 WF运行时 401 19.4 基于状态机的工作流 405 19.5 工作流的持久化 406 19.6 工作流的XAML表示 407
郑州大学包装在线 网站源代码使用说明 ZZU PACKAGING 2000 Website 2002-10-30 系统说明: 这是我第一个 ASP.net 作品,写于上个学期四五月份(40天左 右,还要上课) 我是郑州大学包装工程系的学生,本系统本来是为我们专业同学 做的一个网上展示平台,包括了专业新闻,专业网上知识库,论坛, 留言簿,作品展示(由于专业是包装嘛),个人资料展示等等。当 然还有完整的后台管理模块。 当时写作时,几乎没有什么可以参考的源代码示例,只有微软提 供的那些示例还有 IBuySpyStore, IBuySpyPortal 的代码可以参考。 加上我的机器很破,运行 Visual Studio .net 很吃力,所以代码 几乎都是一行一行敲出来的(当然里面有部分是Ctrl-C,Ctrl-V的, Copy也是自己刚写出来的)程序几乎都是从零做起。虽然很多在现 在看来很幼稚,但毕竟是自己的东西,还是挺喜欢的。 因为院系内部的一些原因,这个网站无法放在互联网上以实现我 最初的设想。也正是因为如此,我希望将这个网站的全部源代码公 开,供所有 ASP.net 的爱好者参考,更希望对初学者有所帮助。 如果有什么疑问,可以来信咨询,我会尽力帮忙。 Email: percyboy@800e.net QQ: 7893338 版权说明: 你可以自由的复制,传播本源代码,但请保持代码的完整性,保持本 说明文件的完整性。未经许可,请不要私自用于商业用途。 请不要改动部分代码之后或者干脆不改动,就署上你的大名。 我不对由于本源代码发生一切后果负责。 如果你要在网站中收录本代码的副本下载,请以Email通知本人知道 安装环境要求: 1)操作系统:Windows 2000(SP2以上) + IIS 5.0 Windows XP + IIS 5.1 2)Internet Explorer 5.5 以上 3)Microsoft Data Access Component 2.6 以上 4)Microsoft .net framework 再分发包 或者 Microsoft .net framework SDK 或者安装过 Visual Studio .net 安装说明: 1)解压缩后,直接放到某个目录下,以下以 D:pack 为例说明。 2)打开 IIS 管理单元,新建虚拟目录,别名作 pack, 指向 D:pack,权限:读取,运行脚本就可以了就行了。    本虚拟目录要设置为 应用程序 级别的,方法是:    在IIS管理单元的pack虚拟目录右击,打开“属性”对话框,    在“虚拟目录”选项卡下方,“应用程序名”后面点“创建”按钮。 特殊目录: D:packpackaging_data D:packupload 需要可写入权限。 3)打开 D:packweb.config 文件进行如下设置: 在 appSettings 这一节中, 将所有物理地址改变为你的实际物理地址,即: D:pack D:packpackaging_datadb2.mdb D:packpackaging_datacounter.xml 在 system.web 节,authentication 子节, 为了避免重名,可以更改 cookie 名,具体位置在: 不会显示显示详细的出错跟踪信息。 其他的设置,你可以自行改动,如果你不懂,可以不管那些。 4)D:packin 文件夹中除了 packaging.dll 文件外的 那几个 vb 文件是组件的源代码,mk.dat 是编译用的批处理文件。 网站发布时,这些文件应该被删除。 5)如果你使用的是 NTFS 格式的磁盘,请注意进行权限设置: 以下给出最严格的权限设置: (当然你可以采用比这些更为宽松的权限设置) D:pack Administrators 允许:完全控制 aspnet_wp 允许:读取及运行,列出文件夹目录,读取 本目录不继承父目录可继承权限。 D:packpackaging_data Administrators 允许:完全控制 aspnet_wp 允许:读取及运行,列出文件夹目录,读取,写入 继承父目录权限 D:packupload Administrators 允许:完全控制 aspnet_wp 允许:读取及运行,列出文件夹目录,读取,写入 继承父目录权限 6)关于数据库防下载的问题,下面介绍两种方法: i)db2.mdb 中包含一个名为 nodown 的表,如果将 db2.mdb 改名为 db2.asp 就可以防止下载。当然因为是 ASP 版本的防下载,你的服务器必须解释ASP才行。 原理见: http://www.aspsky.net/article/index.asp?classid=2&Nclassid=5 ii)用得多的一种方法是将文件重命名为 db2.asax 这样也可以达到防止下载的目的,原理是: ASP.net 环境禁止访问 *.asax 文件。 上述两种方法,都要记着要把 web.config 中的相应地址改变。 好了,现在打开浏览器,输入: http://localhost/pack/ http://(你的机器名)/pack/ http://127.0.0.1/pack/ http://(你的真实IP)/pack/ 就应该可以看到这个站了! 如果还不能看到的话,你就要仔细检查一下 IIS 方面的相关设置, 比如 IP 限制,比如默认文档是否有 Default.aspx 还有,Microsoft Data Access Component 如果不是 2.6 以上版本的话, 将无法访问数据库。 还有一条,比较幼稚的问题,你装了 Microsoft .net 环境了没有? 使用说明: 1)目前有两个账户: 一个是系统管理员: 账户:percyboy 密码:percyboy 这个用户一定不要删除,否则很多管理功能无法进行,你看了源代码就知道了。 一个是普通学生身份(就是我自己了:)) 账户:破宝 密码:percyboy 我们专业内部的学生可以发表自己的作品,外部注册的用户没有此权限。 2)因为缩略图是使用当时生成的,所以时间长了, D:packupload mp 目录中就会有好多垃圾小图片,只怪当时的设计欠考虑,但也不想再改动了。 3)已知的一个bug,登陆之后,页面上方的“欢迎”内容没有变化,需要 刷新一下,或者打开另一个页面之后,才会出现用户的名字,还有“集体管理”的 链接。也不想改动了。 percyboy
一.系统模块的实现 在系统中包括以下功能:系统管理、学籍信息管理、课程信息管 理、成绩信息管理、帮助。分为以下几个模块 主窗体 标 题 名 称 系统管理 sysMenu ……用户管理 Control ……退出系统 Exit 学籍管理 sInfo 课程管理 cInfo 成绩管理 rInfo 帮助 help ……使用说明 howto ……关于 about 1.1登录模块 为了系统的安全,在进入系统之前首先会出现一个登录模块,用户只有在输入正确的用户名和正确的密码之后,才能进入系统。 用户登录窗体中放置了两个文本框(Textbox),用来输入用户名和密码;两个按钮(CommandButton)用来确定或者取消登录。 设置一个SSTab控件,供不同用户登录时选择用户权限,超级用户拥有一切权限(包括添加删除和修改以及对用户的管理),普通用户拥有受限制的权限(查询及修改密码),提高了数据库的安全性。 1.2系统管理模块 1.2.1添加用户窗体的创建 进入系统后,将会出现一个主窗体,选择系统管理模块下的添加用户,就可以进入添加用户窗体,可以通过该窗体增加新的用户。 在这个窗体中放置了三个文本框,用来输入用户名和密码;两个按钮用来确定是否添加用户;三个标签用来标示文本框的提示。 1.2.2修改密码窗体的创建 在系统管理模块下,进入修改密码窗体,用户可根据需要修改自己的密码。 在这个窗体中放置了两个文本框,用来输入密码和确认密码;两个按钮用来确定是否修改密码;两个标签用来标示文本框的内容。 1.3学籍管理模块 1.3.1添加学籍信息功能 选择主窗体中学籍管理模块下的添加学籍信息,就可进入添加学籍信息的窗体,在该窗体中我们可以对学生的学号、姓名、性别、出生日期、班号等学生的信息进行添加。设计时我尽可能设想各种边界条件,如记录为空,输入为空,输入出错等,当输入的信息满足这些边界条件时,将会弹出一个提示框提醒用户,以便用户能及时地做出修改。添加的信息将全部存储到数据库中。 在窗体上放置多个文本框和下拉式文本框,用来输入学籍信息;两个按钮用来确定是否输入学籍信息;一个按钮用来退出窗体;多个标签用来提示文本框中需要输入的内容。 1.3.2修改学籍信息功能 点击学籍管理模块下的修改学籍信息,就进入修改学籍信息的窗体,在该窗体中我们可以对前面添加的学籍信息进行修改。由于用户的需求不同,有的是要对学生的信息做个别的改动,有的是需要删除该条记录,所以该窗体同时包括了修改记录的功能和删除记录的功能。又考虑到用户的误操作,为了方便,我在该窗体中增添了取消修改的功能,可一次性把输入文本框的内容全部置空。 1.3.3查询学籍信息功能 进入学籍管理模块下的查询学籍信息窗体,在该窗体中可以对学生的信息进行查询,有三种查询方式。我在设计时,一方面考虑到简洁的因素,用户可以只设置一种查询方式进行查询;另一方面又为了避免数据的重复,用户可以输入详细的信息,也就是同时设置多种查询方式进行查询。进入查询窗体时,myflexgrid中会显示出所有学生的学籍信息,如果不设置查询方式就进行查询,是无效查询,系统会给出提示。在设置好查询方式后,便开始查询,将在myflexgrid中显示出用户所需的学生的学籍信息。 1.4课程管理模块 1.4.1课程信息浏览功能 点击主窗体中课程管理模块下的课程信息浏览,可进入课程信息浏览窗体。为了用户的使用方便,我使用了SSTab控件,故在该窗体中同时包含了课程信息的添加和修改的功能。并且我还在窗体上设置了myflexgrid控件。添加和修改记录后,对于数据有何变化都可以在myflexgrid中显示出来,使用户对所做的操作一目了然。 1.4.2年级课程设置功能 进入课程管理模块下的年级课程设置窗体,可以对每一个年级的课程进行设置。 1.5成绩管理模块 1.5.1成绩信息管理功能 点击成绩管理模块下的成绩信息浏览,进入成绩信息浏览窗体,考虑到美观和实用性,界面设置如下图。用Frame控件在窗体中划定一个可浏览成绩信息地方,再在Frame中添加MSFlexGrid控件,运行时将在MSFlexGrid中显示所有学生的成绩信息。使用Toolbar来建立工具条。点击工具条中的修改、添加和查询按钮就可分别进入修改成绩信息窗体、添加成绩信息窗体和查询成绩信息窗体。这三个窗体的界面设置分别类似于学籍管理下修改学籍信息窗体、添加学籍信息窗体和查询学籍信息窗体。 1.6其它 操作人员在遇到困难时即可进入帮助菜单寻求帮助。帮助菜单下的“使用说明”将解答你的疑问。帮助菜单下的“关于”详细地列出了关于作者的一些情况,关于版权的一些情况和关于系统的一些情况。进入打印菜单栏,可对你所需要的信息进行打印。 二 系统后期工程 在开发这个软件系统的漫长过程中,面对着极其错综复杂的问题,人的主观认识不可能完全符合客观现实,在本次设计过程中,我采用循环测试法,力求在每个阶段结束之前通过严格技术审查,即每完成一个功能,就进行测试,尽可能早的发现并纠正差错,完成模块测试之后再进行系统测试。 在该设计中,我偏重考虑了当用户输入的信息出错时,系统就会出现提示,以便让用户知道出错的原因,并能及时做出修改,所以我站在用户的角度考虑,尽可能设想各种边界条件,如记录为空,输入为空,输入出错等,以此来发现错误,纠正错误,取得了一定的效果。 当然,该学生信息管理系统也存在一些不足之处。在成绩管理界面,当3次改变成绩为不同的内容时,程序会出错。虽然尝试了很多方法,仍不能解决。再一点就是关于打印和年级课程信息设置都未能实现,这有待于以后的进一步提高。 一个应用系统性能的优劣,效率的高低始终应当由用户来做出判决,应用系统在运行过程中,用户会提出一些新的需求和建议,我就会根据用户需求的变化,对本系统做出一定的修改,使其进一步地得到完善和提高。 1. 概述 1.1. 目的 为了彻底解决了长期困扰教学信息化工作当中安全性、可靠性的问题;为了使管理人员可以随时看到更新的数据,极大地提高信息传递的速度;为了管理者再也不必为聘用专门的操作人员来给众多教师编辑学生成绩资料而殚精竭虑,在此,设计了学生课程成绩查询管理信息系统,使得各个使用者在操作上,从此变得那么从容简单,省时又省心。 1.2. 参考文档 [1] 张海藩.软件工程导论[M].第4版.北京:清华大学出版社.2007.25-63. [2] 赵洋,张丽,王恩东,李玉红.基于B/S结构学生成绩管理系统设计与实现[J].沈阳化工学院学报.2007,21(2).140-142. [3] 游应德.基于Intemet的学生信息管理系统—学生成绩管理系统[D].电子科技大学.成都:电子科技大学,2007. [4]郑若忠,王鸿武.数据库原理与方法.湖南科学技术出版社.  2. 总体结构设计 2.1. 层次图 2.2结构图 2.3 功能设计 学生成绩单录入部分可以对某一个学生进行成绩录入,但是一次只能录入一条成绩记录,同时可对缺考、免考、补考学生成绩进行录入。 学生成绩显示/修改部分可以对已录入的成绩进行显示和修改,但是只能对系统默认的当前学期的记录进行修改。 学生成绩显示/删除部分可以对已录入的成绩进行显示和删除,但是也只能对系统默认的当前学期的记录进行删除。 2.3. 运行环境设计 2.3.1. 硬件设计 1.服务器: CPU:P4 2.0G以上 内存:512M 硬盘:60G以上 网络:100M /1000M Ethenet 2.客户机: CPU:500Mz 内存:64M以上 硬盘:1G以上 网络:10M Ethenet 2.3.2. 软件设计 1.服务器: 操作系统:Windows 2000/XP/2003 WEB服务:IIS5.0 数据库:SQL Server 2000(建议打Service Pack 3补丁) 2.客户机: 操作系统:Windows系列之一 浏览器:IE6.0以上版本 2.3.3.网络设计 采用sql server2000网络关系型数据库,存储读取数据将同步进行。 3.详细设计 用判定树表示教师端模块 4. 数据结构设计 4.1. 数据分析 第一层:基础数据及基础数据库分析 此类报表主要反映学校教师、学生和课程等的资料情况。 此类报表是将系统中较为常用的学生、教师和课程等基础资料以报表的形式予以反映。 在本层需要设计三个主表,分别用来存储学生资料、教师资料和课程资料。 第二层:业务流程数据及业务流程数据库分析 在编辑此类表单时,可以点击相应的下拉按钮,这时所有的选项资料都会显 来,您可以根据实际情况来编制表单,使整个过程更加清晰,操作更加简便。 在本层需要设计一个学生成绩主表,用来存储学生的平时成绩表。 4.2. 数据库设计 4.2.1. 设计原则 1.密码管理:学生修改学生查询密码;教师可以修改查询密码。 2.每个教师可以查看所有学生的成绩,包括每门课程的成绩、每门课程的平均成绩、每个分数段的成绩。 3.学生根据自己的学号查询本人的成绩。 4.教师可以登记、修改、查询自己所讲授课程的学生的成绩、该课程的总分、平均成绩、各分数段成绩人数统计、不及格学生的名单、成绩等等。 4.2.2. 数据库组成 数据表3个: 学生表(5个字段: xh, xm, xb, csrq, bj),其中有各班学生的记录 课程表(4个字段:kch,kcm, js, xf),其中有课程的记录; 成绩表(3个字段:xh, kch, cj),其中有学生成绩的记录。 学生基本信息表(Student)描述如下: 学生期末成绩表(Grade)描述如下: 学生的课程管理(Course)描述如下: 4.2.3. 面向对象数据库设计方法 1)考虑对象的静态和动态属性 对象属性决定了数据库或包含具有相同类型对象的表的内容。 2)描述数据实体及其属性 包含所有静态属性的单个对象被称作数据实体。每个单独的数据实体必须唯一,这样可以与其他实体区分。包含在数据实体中的对象的性质被称作为属性。(attribute) 3)用方法来说明对象的行为 关系数据库对象的行为决定了数据对象参与事务的特征。事务的发生对应着事件,通过使用响应事件的方法来实现事务。 4)在单个表中合并不同实体 可以在单个表中包含不同对象类型的说明,只要可以按照相同方式描述属性和行为,以及区分不同对象类型即可。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧