-
Notifications
You must be signed in to change notification settings - Fork 17
/
Asp.net 4 入门到精通=George Shepherd; Note=eshang.txt
182 lines (165 loc) · 8.15 KB
/
Asp.net 4 入门到精通=George Shepherd; Note=eshang.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
Asp.net 4 入门到精通=George Shepherd; Note=eshang
:名词
RC, release candidate, 发布候选版
URI, uniform resource identifier
:硬件与软件要求
>win7, server2003, server2008, vista
iis5.1+
visual studio 2012
sql 2008
dx9
>示例代码, http://www.wenyuan.com.cn
>支持, http://www.microsoft.com/learning/support/books
:Web应用基础
>http 请求
http协议位于TCP最顶层, 应用层, application layer
- GET指令连接后发送完信息即断开
- POST是保持连接
- PUT用于发送文档或记录
>请求页面一般要先使用GET, 随后通过POST来与服务器交互
>一般的HTTP请求格式
- get
get / asp.net4sb /helloworld.htm http/1.1
accept:image/gif, image/x-xbitmap, image/jpeg, ..., */*
accept-language:en-us
accept-encoding:gzip, deflate
user-agent:mozilla/4.0(compatible;msie7.0; windows nt5.1; ... .net clr 3.0.04506.30)
host:localhost:80
connection:keep-alive
...
- post
POST /selectfeature2.htm http/1.1
accept:image/gif, ...
accept-language:en-us
content-type:application/x-www-form-urlencoded
accept-encoding:gzip, deflate
user-agent:mozilla/4.0(compatible;msie7.0; windows nt5.1; ... .net clr 3.0.04506.30)
host:localhost:80
content-length:42
connection:keep-alive
cache-control:no-cahe
>TCP监视程序
http://www.pocketsoap.com/tcptrace
>也可以编码形式发出HTTP请求
WebRequest类, 包含一名GetResponse成员
>公共网关接口, Common Gateway Interface, CGI, 以实时方式运行, 根据应用程序状态与转入请求改变输出. 每个请求进入单独进程处理
>Microsoft环境下的web服务器
使用单个守护进程(daemon process, 即服务)来监视80端口传入的网络数据包, 并在需要修改内容的时候加载处理请求的动态链接库(dynamic-link library, dll), 是以IIS为基础构件的
- IIS使用虚拟目录管理服务器内容
- IIS扩展的DLL称为ISAPI
>visual studio内建服务器, cassini可以满足大多数需求
>internet服务器应用程序编程接口dll
- ISAPI, IIS会监听指定端口的请求, 然后将其交给特定的ISAPI处理, 例如asp由asp.dll的ISAPI进行处理, asp.net早期使用aspnet_isapi.dll, 现在的asp.net已经使用管线(pipeline)集成进入iis了
>internet信息服务的运行
- 由虚拟目录进行管理
下面有功能视图, 内容视图两个tab
- 可以查看虚拟目录的模块映射
- .htm会直接返回客户端
- 动态页面会使用托管代码处理, 在CLR中处理
- IIS7.0还包含一套C++/native核心服务应用程序编程接口(API), 该API通过IsapiModule来暴露传统的ISAPI扩展DLL, 以这种方式来与IIS7.0协作
- 功能视图中双击模块视图, 可以看到IIS7.0中请求的各模块
- 对于托管代码来处理的应用程序, IIS会通过处理程序来使其穿越相应的管线
- IIS7.0需要手动添加对ASP的支持, ASPClassic
>传统的ASP
在浏览器的查询字符串中前有ACMEISAPI.DLL
可以使用C/C++编写ISAPI来构件整个网站
- 例如
<%language="javascript"%>
<body>
<%Response.Write("hello");%>
</body>
当asp遇到<%%>内的内容时,会调用javascript解析器来运行他们
<%=varName%>, 直接输出, <%=Request("formKeyName")%>
- 弊端, 不能有效地控制页面的显示
>Web开发思想
- 在无连接型协议上通过HTML来管理用户界面UI
- 管理应用程序的状态
>ASP.net
- 1.0, 引用定义明确的管线
- 2.0, 增加的许多网站需要实现的功能, 例如身份验证与授权服务
- 3.5, 加入对ajax的支持, 支持wcf应用程序
- 4.0, 进一步支持ajax, 提供了模型-视图-控件的实现, model-view-contrller, MVC, 支持silverlight
:ASP.net 应用程序基础
>COM, component object model, 全新的面向对象的执行模型
>IIS管理创建网站
>*.aspx为ASP.net专用文件名
- 格式
<%@page language="C#" [debug="true"]%>
<html>...</html>
>应用程序池, IIS 6.X, 7.X, application pool, 目的是将web应用于同一台计算机的由IIS管理的其他软件隔离. IIS 5.x以localsystem账户运行asp.net工作进程, 存在很多安全隐患. 因为该账户可以访问服务器上所有资源. 应用程序池默认工作在networkService账户下
>服务器端脚本, <%..%> <script runat="server"> ..</script>
>执行模式
asp根据脚本逐行解释
asp.net 每个页面翻译为一个类, 使用CLR运行
IIS负责文件扩展名与解释请求的二进制组件之间的映射
IIS 7.x 具有统一的身份验证与经典(向后兼容, 兼容低版本)
- IIS 7.x之前版本, 请求路径
请求到达iis -> iis交给aspnet_isapi.dll(5.x->aspnet_wp.exe)->asp.net通过httpcontext实例来对请求进行包装->asp.net将请求交个httpApplication实例->如果应用程序定义了事件处理那么会针对处理对应触发的事件->运行实例化一个处理程序
- IIS 7.x请求路径
请求到达iis -> 服务器上的http.sys接受请求 -> http.sys使用WAS(web application service)查找配置信息, 以便将请求传给web服务->WAS将配置信息返回给web服务,以便配置http.sys->WAS请求对应的进程池中的进程->进程处理后将结果返回给http.sys->http.sys返回响应到客户端
>visual studio .net版本包含一个中间语言反汇编程序, intermediate language disassembler, ILDASM工具, 通过反射对应用程序进行反汇编
- 运行visual studio command prompt, 运行ildasm 可以查看dll文件等的内容
>传统的asp应用程序对COM组件在运行时锁定, 导致在网站更新的时候必须首先停止网站, 这对部署带来了麻烦. asp.net采用虚拟目录的形式来处理, 解除了对网站内容的锁定
>asp.net 1.x编码风格, 支持代码隐藏, 在第一行说明aspx文件对应的类, 然后直接调用类文件中对应的函数即可
<%@page langeuage="C#" inherites="helloWorld4Code" src="HelloWorld4Code.cs" debug="true"%>
<html>
...
<% this.someFunction() %>
...
</html>
;
对应cs文件, hellowWorld4Code.cs
using system.web
public class helloWorld4Code:System.web.ui.page{...}
- asp.ne.net读取scr属性, 在第一次页面访问编译文件并存储于虚拟目录. 也可以先编译文件将文件复制到应用程序虚拟目录的bin目录下
>现代asp.net风格, 代码旁至
<%@ page language="c#" codeFile="helloWorld5Code.cs" inherites="helloWorld5Code"%>
<html>
...
<% someFunction() %>
...
<html>
;
对应cs文件
>asp.net 的http 管线
asp.net请求终点都是iHttpHandler的实现, 不再需要单独的基于com的脚本对象, asp.net提供了一些ihttpHandler的实现, 如system.web.ui.page, system.web.services.webservice
>asp.net http pipline管线
- asp.net 4.0 每个请求的端点都是一个IHttpHandler的实现
>管线内部的组件
- httpApplication, http请求的汇聚点
- httpContext, 当前的请求信息
- httpModule, 比application对象更复杂的请求处理, 例如身份验证, 授权, 会话状态
- httpHandler, 实现iHttpHandler接口的对象都可以处理程序
>visual studio 2010与asp.net
- 定义四种网站
* iis网站
* 基于文件系统, 页面运行使用visual studio的开发服务器
* ftp
* 远程网站, 访问其他机器上的iis
:页面的呈现模式
>asp.net 页面
<%page language="c#">, 说明脚本语言为c#
runat=server, 属性, 说明通过生成服务器端控件来处理UI元素, 例如就是讲C#的控件转换为html语言, 发送给客户端. 控件在aspx对应的C#的*.cs文件中可以直接引用
>所有的服务器端控件派生自system.web.ui.control
>内建对象
- response
- session
- application
>可以自定义控件
>常用控件
- validation类型
* 客户端验证, 要添加javascript代码
* 服务器端验证, 要实现IValidator类
- 图像控件
- treeView控件
- multiView控件
:一致的界面
> asp.net母版页, masterpage
> 可以添加使用母版页的web窗体
> 主题, 也就是html页中的css文件
- 定义主题, asp.net具有自己的css文件编辑器, 命名后
- asp.net页面引用主题
<%page theme="主题名" language="C#"%>
:配置
>.net配置机制, 文件名称为machine.config的xml文件, 路径, %systemroot%\microsoft.net\framework\versionNumber\config
> web.config, 包含debug和release版本的共享设置