Basic Concepts of ASP.Net

1.       浏览器通过HTTP协议访问网络,首先由DNS将地址转换为IP地址,然后浏览器打开一个套接字连接,通过一个地址端口连接服务器,一个典型的HTTP请求:
GET /test.html HTTP/1.1
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
If-Modified-Since: Web, 24 Oct 2001 14:12:36 GMT
If-None-Match: “50b0d3ee955cc11:a 78”
User-Agent: Mozilla/4.0.(compatible; MSIE.6.0; Windows NT 5.1)
Host:
www.microsoft.com
Connection: Keep-Alive
[blank line]
这个请求的第一行为起始行,由一个方法名、所请求的资源名和一个HTTP版本号。接下来的8行语句组成了消息标头,最后一个空白行表示标头结束也表示请求结束。
一个典型的GET命名响应:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Wed, 24 Oct 2001 14:12:37 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Wed, 24 Oct 2001 14:00:53 GMT
ETag: “d02acf8197cc11:a 78”
Content-Length:46
[blank line]
<html>
<body>
Hello, world
</body>
</html>
HTTP1.1
中定义了7种方法,GET是其中一种。

2.       提交按钮(<input type=”submit”>),单击它时,它会将窗体提交给Web服务器。提交方式取决于<form>标志是否包含一个Method属性以及它的属性值(如果有)。如果Method属性没有或者属性值为GET,则以查询字符串的形式将窗体中用户输入附加在URL上,发生GET命令,如GET /test.html?op1=1&op2=2 HTTP/1.1 ….;如果属性值为post,则会发送一个POST命令,这时用户输入作为HTTP请求的主体中传递,如 POST /test.html HTTP/1.1 … [blank line] op1=1&op2=2。这种把输入提交给服务器的行为成为回发(postback)

3.       服务器控件的属性均可以通过一个名称/值对来代表,通过把名称属性作为控件声明标志中的一个属性,可以对控件进行初始化。属性也可以被服务器端教本来访问。如<asp:TextBox Text=” 2” ID=”op 1” runat=”server” />;脚本int a=Convert.ToInt32(op1.text);

4.       服务器控件的事件来响应用户输入,如单击Button控件触发Click事件,为事件名加上”On”并将前缀后的文件作为控件声明标志的一个属性。如<asp:Button Text=” = “ OnClick=”OnAdd” runat=”server” />;属性runat是必须的。

5.       ASP.Net支持两种类型的服务器控件,Web控件和Html控件。Web控件在FCLSystem.Web.UI.WebControls中定义。Html控件从System.Web.UI.HtmlControls中定义,通过在普通的html标识中添加runat=”server”来什么Html控件。

6.       Web控件和Html控件之间主要的不同,(1)按钮控件连接到事件处理程序的属性名,Web控件为OnClickHtml控件为OnServerClick(2)在脚本语言中,Web控件OnAdd使用Text的属性,Html控件使用Value属性;(3)Web控件使用LabelText属性,Html控件使用InnerText属性。

7.       ASP.Net处理aspx文件流程,首先创建一个临时文件,其实包含一个由System.Web.UI.Page派生类,它代表了ASP.NetWeb页;ASP.Netaspx文件中的代码以及它自己的一些代码复杂到由Page继承的类,aspx<script>块中的方法将成为该类的方法;ASP.Net编译这个派生的类,并将结果DLL放到一个系统文件夹,DLL被缓存,只有ASPX文件被修改才会重复上述步骤;ASP.Net实例化这个派生类并对其调用一系列方法来执行它。

8.       Page_Load方法会在页触发Load事件时被ASP.Net自动调用,该方法只有在IsPostBack的值为false时才会对控件进行初始化。Page_Init可以在运行时创建控件,并把它们添加到页中,还可以通过编程的方式实现事件及处理程序的连接。如
void Page_Init(Object sender, EventArgs e)
{EqualsButton.Click += new EventHandler(OnAdd); }

9.       ASP.Net支持大量的页级别指令;如@Page指令;如<%@ Page Language=”C#” %>将脚本默认语言改为C#ASP.Net可以像ASP一样使用Reponse等内部对象;如在Html代码中可以直接增加<% Response.Write(“Hello”) %>。另外一个常用的用途是启动调试支持,如<% @Page Debug=”true” %>@Import指令类似与C#中的using@Assembly标识了Assembly,它主要使用在一些编译器不能默认连接Assembly时指定Assembly;比如System.DirectoryServices就不是默认的Assembly@OutputCache使得应用程序以声明的方式控制页缓存和片断缓存,ASP.Net支持页缓存(缓存整个页)和片断缓存(缓存页面的一部分),如<%@OutputCache Duration=” 60” VaryByParam=”None”%>将页面缓存60秒。

10.   ASP.Net中,可以使用DataSet来直接读取XML文件,如DataSet ds = new DataSet(); ds.ReadXML(Server.MakePath(“Rates.xml”));取得ds中的数据,如foreach(DataRow row in ds.Tables[0].Rows) {使用row[“名称”]访问}

11.   代码隐藏的方法:(1)创建CS文件,其中包含事件处理程序、方法等,使得这些源代码都是从System.Web.UI.Page中派生的类的成员;(2)在由Page派生的类中,对于其名称能反映出aspx文件所声明控件的ID的字段,设为protected的。(3)编译该CS文件为DLL,并放到bin子目录下;(4)Web窗体的HTML部分,使用@Page指令中的Inherit属性,用以标识Dll中的Page派生类。其工作原理是ASP.Net会在访问aspx文件时根据Inherit属性标识的类派生出一个类,并且由它来处理请求。可以使用@PageSrc属性来由ASP.Net编译Src文件。

12.   Web控件,TextBox控件<asp:TextBox>,常用的属性,Text是指控件中的内容;RowsColumns设置行数和列数;MaxLength限制文本长度;ReadOnly限制只读;Wrap决定文本是否包装在一个多行输入字段;TextMode设置SingleLineMultiLinePasswordAutoPostBack在内容发生改变时自动postback;常用的事件TextChanged

13.   Web控件,Label控件<asp:Label>,常用的属性,Text是内容;Label控件经常充当服务器端脚本输出的占位符。

14.   Web控件,HyperLink控件<asp:HyperLink>,有两种类型:文本HyperLink和图像HyperLink;常用的属性,NavigateUrl属性,Target属性,用来控制目标Web页显示的方式。

15.   Web控件,Image控件<asp:Image>,常用属性,ImageUrl指明图像路径,ImageAlign控制图像的排列,AlternateText指定图像的替换文本。

16.   Web控件,CheckBox控件<asp:CheckBox>,常用属性:Checked属性和AutoPostBack。常用事件CheckedChanged

17.   Web控件,RadioButton控件<asp:RadioButton>,支持CheckBox所有属性和事件,GroupName属性。要想要脚本中判断一组单选按钮的哪个按钮被选中,需要逐个检查每个按钮的Checked属性;一个更好的办法是使用RadioButtonList,它的SelectedIndex指定了被选中的按钮。

18.   Web控件,Table控件<asp:Table>,向Web窗体添加Html表。如建立一个12列的表:
<asp:Table ID=”MyTable” runat=”server”>
   <asp:TableRow>
      <asp:TableCell>Row1, Column 1</asp:TableCell>
      <asp:TableCell>Row1, Column 2</asp:TableCell>
   </asp:TableRow>
</asp:Table>
脚本中添加Table,可以使用TableRowTabCell类。常用属性GridLinesCellPaddingCellSpacingBackImageUrl等。

19.   Web控件,Panel控件<asp:Panel>,充当其他控件的容器,它的用途之一是控制一组控件的可见性;另外一个是指定一组控件的水平排列方式。常用属性是VisibleAutoPostBack以及HorizontalAlign等。

20.   Web控件包含3种类型的按钮控件,Button<asp:Button>LinkButton<asp:LinkButton>ImageButton<asp:ImageButton>,它们的区别只在外观上。其中ImageButton支持属性ImageUrl,在OnClick事件的响应参数是ImageClickEventArgs。按钮控件的Command事件,可以通过CommandNameCommandArgument属性来传递其他信息。如
<asp:Button Text=”Sort” ID=”SortButton” OnCommand=”OnSort” CommandName=”Sort” CommandArgument=”Asc” runat=”server” />
脚本处理方式
void OnSort(Object sender, CommandEventArgs e)
{if(e.CommandName==”Sort”…)}

21.   Web控件,列表控件,分别为ListBoxDropDownListCheckBoxListRadioButtonList。它们都派生自System.Web.UI.WebControls.ListControl。列表控件的项由ListItem标识。常用事件SelectedIndexChangedListBoxDropDownList的唯一区别在于ListBox可以通过编程支持多项选择,通过设置属性SelectionModeMultiple,不过ListBox类没有一个可以检索多项选择的方法和属性,不得不遍历所有项。CheckBoxList常用属性是RepeatColumn(每行的列数)RepeatDirection设置排列顺序。RadioButtonList类似与CheckBoxList

22.   列表控件从ListControl类继承了DataSourceDataTextFieldDataValueField属性。DataSource用来指定数据源,它可以初始化为实现了IEnumerable或者IListSource接口的对象;因此列表控件能够列举DataSet包含的DataTable中的行。DataTextField字段与列表控件的项的Text属性连接的数据源的字段。列表控件还从ListControl基类中继承了DataBind方法,该方法命令控件从数据源对自己进行初始化。可以手工编写支持IEnumberable接口的类。

23.   Web控件,数据绑定控件,包括RepeaterDataListDataGridRepeater控件用UI模板来呈现从数据源获得的项;DataList控件页使用UI模板,但是它们还另外支持多列格式、项选中已经项编辑;DataGrid在高度可自定义HTML表中表示表数据并支持分页,排序,编辑等特性。[具体三个Control的属性分析略]

24.   Web控件,Calendar控件<asp:Calendar>,常用的事件有SelectionChanged(用户选择了一个新日期)VisibleMonthChanged(用户已经导航到其他月份)DayRender(在日历呈现单个单元格激发。可以通过该事件在单个单元格中插入自己的html进行自定义)

25.   Web控件,提供了6个验证控件,它们都有一个共同的基类BaseValidator,一些共有的属性,如ControlToValidate指定了需要验证的控件;ErrorMessage属性定义了错误消息;ForeColor指定错误显示的颜色,Display属性决定错误如何显示,EnableClientScript决定是否启用客户端验证。常用的有RequiredFieldValidator(验证是否为空)RangeValidator(验证输入值在一个范围内)CompareValidator(验证输入与指定值是否相等),RegularExpressionValidator(验证某个正则表达式),如只能输入非数字字符,设定ValidationExpression=”^/d+$”,邮件地址的有效验证”^[/w/.-]+@[/w-]+/.[/w/.-]+$”CustomValidator用于完成其他Validator无法完成的任务,可以设定其ClientValidationFunctionOnServerValidate分别指定客户端验证方式和服务端方式;ValidatorSummary控件自己不进行验证,而将其他Validator的错误分批并分组显示,通常需要把其他控件的Display属性设置为none

26.   页面之间的跳转并传递数据,使用Response.Redirect实现;而接受页面通过Request在输入数据中查找对应的值。

27.   对于strings,每次对其赋值都导致内存的重新分配和Copy,所以在动态增加字符串时尽量使用StringBuilder类。

28.   用户控件以ascx为文件扩展名,其中不能出现<form>标志。aspx使用@Register指令声明标识名和后缀,并把它们映射到ascx文件,使用该指令注册的标记将用户控件增加到Web窗体。如<%@Register TagPrefix=”user” TagName=”Hello” src=”Hello.ascx” %>,引用该用户控件时,直接使用<user:Hello>

29.   用户控件ascx文件中使用@Control指令,与aspx文件中的@Page指令几乎完全相同,一个文件中同样只能出现一次;ascx文件也支持@Import@Assembly指令。

30.   用户控件和Web控件一样,支持属性和事件,但是必须用户控件的设计者添加属性和事件响应处理。其中事件添加需要在控件ascx文件中增加一个event,如public event EventHandler Login,而在aspx中定义该事件的属性名:OnLogin

31.   用户控件也支持代码隐藏(code-behind),同样需要将script中的C#方法和事件等添加到一个由UserControl派生的类中。在ascx文件中使用<% @Control Inherits=”LoginBase” %>,其中LoginBase为派生的类的名称。

32.   ASP.Net判断当前用户的信息,比如使用浏览器是否为IE,版本信息等,可以使用Request.Brower.Type.ToUpper().IndexOf(“IE”)>-1 && Request.Browser.MajorVersion>=4Web服务器从HTTP头的User-Agent中获得该信息。

33.   aspx中通过编程的方式创建用户控件,称为动态加载(dynamic loading)Page类的LoadControl的方法在运行时加载用户控件。如Control hello=LoadConrol(“Hello.ascx”); Controls.Add(hello);LoadControl创建的Control引用不能访问ascx文件定义的任何方法和属性或事件,解决方案是把Control引用转换为Hello_ascx引用,”Hello_ascx”ASP.Net用来生成Hello控件的一个类,它只是把ascx文件名加上_ascx得出类的命名,可以在ascx中使用Control指令自定义Control的名称<% @Control ClassName=”Hello” %>

34.   Cookie是在Web服务器在HTTP响应的Set-Cookie头返回Cookie来创建它。会话Cookie和永久Cookie区别在与Expires属性的有无,没有就为永久CookieASP.Net使用了HttpCookie类来简化Cookie的使用。

35.   用户控件支持片断缓存,可以在@OutputCache指令中加入VaryByControl属性,按照同一控件的不同实例的属性值对不同实例进行缓存。

36.   自定义控件从System.Web.UI.Control继承,该类定义了服务器控件的基本特征,也可以从其他的控件派生,其中最重要的方法是Render,该方法通过参数列表接受一个HtmlTextWriter参数,该参数的方法WriteHTML写入输出流。自定义的控件类必须属于某个命名空间。Aspx文件使用Register引入自定义控件。

37.   自定义控件中,如果输出的标识中包含Name属性,那么该属性的值应该取自从Control继承的UniqueID属性;如果包含Id属性,那么值应该是继承来的ClientID属性。

38.   自定义控件通常实现IPostBackDataHandler接口,该接口的LoadPostData方法来完成接受回发数据。RaisePostDataChangedEvent方法用来按照回发更新属性的控件激发Chnge事件。

39.   ASP.Net提供了视图状态机制,是控件保持状态信息的地方。通过一个名为ViewStateControl属性来公开它的视图状态机制,该属性的类型是StateBag。其工作原理是生成了一个hidden的控件,客户端把该控件回发给了服务器,而该控件的值是所有控件写入视图状态的所有数据,页面本身保存的视图状态和页面内容生成的Hash值。可以使用@Page指令的EnableViewStateMacValidation属性来增强安全性。

40.   实现TextBox等控件的AutoPostBack属性,可以在Render函数中加上额外的处理,如
if (AutoPostBack){writer.WriteAttribute(“OnChange”, “javascript:” + Page.GetPostBackEventReference(this);}
这时在生成的html文本中添加了一段JavaScript脚本来支持自动回发功能。

41.   接口IPostBackEventHandler用于在回发发生时通知产生回发的控件(IPostBackDataHandler用于在回发时更新它们的属性),该接口只有RaisePostBackEvent一个方法。

42.   所有从Control派生的类都能充当其它控件的容器,被容纳的控件,通过父控件的Controls属性公开。把充当容器的控件称为复合控件,通常有两种类型,声明型和编程型。声明型自定义控件包含Web窗体中声明的其他控件,它不会创建所包含的控件。编程型则需要实现Control类的CreateChildControls方法来创建所包含的控件。复合控件都应该派生自INamingConttainer,该接口的目的在于允许ASP.Net为每个子控件分派一个独一无二的名字,该接口为空。

43.   当返回客户端的脚本比较间断时应该从控件的Render方法返回;如果比较复杂,应该使用Page.RegisterClientScriptBlock来返回。该方法在控件的OnPreRender中被调用,ASP.Net在调用任何控件的Render方法之前都会对页面内每个控件调用OnPreRenderASP.Net还支持一个Page.RegisterStartupScript方法,该方法把是返回客户端的JavaScript函数,而是返回在页面加载时执行的一般脚本。<script>标记支持src属性,该属性使得脚本可以被远程调用,这种方法可以隐藏客户端脚本;还可以同时更新公用的JavaScript函数集,这真是ASP.Net的验证控件的工作原理,他们的主要函数在WebUIValidations.js

44.   编写图形控件的关键在于让它的Render方法返回一个<img>标记,如果是静态的,则src属性指向一个文件;如果是动态的,src属性指向创建图像的URL地址,如src=”imagegen.ashx?shape=circle&color=red”,其中ashx文件是HTTP处理程序。

45.   HTTP处理程序是一个类,它处理对服务器上的一个特定终端或一组终端的HTTP请求。ASP.Net内置的HTTP处理程序处理对aspxascx等文件请求,可以扩展ASP.NetHTTP处理程序,通过对Web.configURLHTTP处理程序进行映射,如下列Web.config文件中的条目将对本目录下以及子目录下的ImageGen.ashx文件的请求映射到DynaImageLib.dll程序集中的一个ImageGen的类:<httpHandlers> <add verb=”*” path=”ImageGen.ashx” type=”ImageGen, DynaImageLib” /></httpHandlers>,处理类一般从IHttpHandler派生,实现ProcessRequest方法;如果选择一个独有的文件扩展名,必须把该文件扩展名映射到IIS中的Aspnet_isapi.dll

46.   ASP.Net应用程序由一个虚拟目录及其子目录下所有的文件组成,通常情况下一个应用程序包含一个或多个以下文件类型:(1)aspx (2)ascx (3)包含配置设置的Web.config文件 (4)一个包含全局应用元素的Global.asax文件 (5)包含该应用程序所用到的自定义类型Dll

47.   Web.config文件中的<appSettings>部分含有应用程序特定的值,这些值由其它字符串键入,它的目的是用参数表示应用程序的行为,并能够不改变源代码的前提下修改这些行为。<system.Web>部分保存ASP.Net使用的配置设置,它的内容通过分段来进行分类。默认的设置在Machine.config定义。Web.config文件的一个特点是配置继承,即子目录将继承父目录的配置,子目录也可以使用自己的Web.config文件覆盖设置。

48.   Global.asax文件收容了应用级别的事件处理程序,适用于整个应用程序的声明以及其他全局应用程序元素,一个应用程序只能有一个Global.asax文件。它支持3种类型:全局指令,全局事件处理程序和全局对象标记。其中全局事件处理程序特别重要。

49.   Global.asax的全局指令支持3种类型:@Application,只能有一个该指令,Description属性让开发人员增加声明,Inherit属性,用来支持将代码打包到单独的Dll(System.Web.HttpApplication的派生类)@Import导入Namespace@Assembly标识Assembly

50.   Global.asax最常用的目的是处理全局事件,某些全局事件由处理单个请求的HttpApplicaion实例激发,其他全局事件由HTTP模块激发。如应用程序启动或地址,激发StartEnd全局事件,可以在Global.asax增加Application_StartApplication_End的处理;又如Session_StartSession_End事件。

51.   Global.asax支持全局对象标记,以声明的方式创建对象实例。如为每个访问站点的用户创建一个新的ShoppingCart实例:<object id=”MyShoppingCart” class=”ShoppingCart” scope=”session” runat=”server” />

52.   ASP.Net为了提高性能,提供了2种机制缓存常用数据:应用程序状态和应用程序缓存。前者为了适应ASP。应用程序状态物理含义是System.Web.HttpApplicationStatue的实例,HttpApplicationStatue属性和方法公开了应用程序的内容。应用程序缓存由System.Web.Caching.Cache的实例表示,它也是通过属性在程序代码中使用,Global.asax中使用Context.Cache进行访问,aspx中使用Cache直接进行访问;它必须自己提供锁定机制,这点区别与应用程序状态;它支持到期策略;它支持缓存删除时回调。

53.   ASP使用Cookie来记录会话(session),而且将状态保存在内存中;ASP.Net则支持多种存储模式,页面通过System.Web.UI.Page继承的Session属性来访问它,Global.asax使用System.Web.HttpApplication继承的Session属性,这两种情况下Session属性都映射到System.Web.SessionState的一个实例。ASP.Net特别创建了HttpSessionState为每个发出请求的用户保存数据。HttpSessionStateSessionID标识了会话ID,另外一个IsNewSession属性显示会话ID是否为当前请求创建的。默认情况下ASP.Net也使用Cookie来标识会话,不过可以通过Web.configMachine.configsessionState元素添加cookieless=”true”来禁止Cookie,这时使用URL munging

54.   ASP.Net支持3种会话状态处理模式,分别是进程内(ASP.Net进程内,即Aspnet_wp.exe)、状态服务器(保存在Web服务器或者远程机器的一个外部“状态存储器”的进程中)SQL Server。默认为进程内。可以在Web.config文件的sessionState元素下添加mode属性来指定。状态服务器实际上是一个名为Aspnet_state.exe,启动状态服务器,必须在Web.config文件中sesstionState下增加mode=”StateServer”stateConnectionString来指定状态服务器进程所在的主机。为了启用状态服务器模式或者SQL Server模式,会话状态中的保存类型必须是可序列化的。可以通过添加Serializable属性来支持。

55.   会话生存期,可以通过3种方式来修改:(1)编辑文件,Machine.config(2)将如下代码放到本地文件,Web.config;第三种是将超时值写入一个HttpSessionStateTimeout属性。通过调用Abandon方法来明确的关闭一个会话。

56.   每台服务器的Machine.config文件包含一个machineKey元素,用来将值指派给加密密钥对。在Web场配置ASP.Net之前,应该对每台服务器进行配置修改:(1)machineKeyvalidationKey属性设置为长度为40-128的一个随机值;(2)decryptionKey属性设置为16-48长度的一个随机值。

57.   ASP.Net支持3种类型的验证(authentication),分别为Windows验证,Passport验证和窗体验证。ASP.Net支持两种类型的授权,分别为ACLURL授权。ACL授权通常用于使用Windows验证的场合。

58.   默认情况下Aspnet_wp.exe使用ASPNET帐户运行,属于Users组。模拟(impersonate)是指使用IIS提供的访问令牌来执行请求。在顶层的Web.config或者Machine.config文件中启动模拟:<identity impersonate=”true” />,更改Aspnet_wp.exe的权限,在Machine.config中设定<processModel username=”SYSTEM” />拥有全部权限。

59.   Windows验证有4种形式,基本、简要、集成和证书。基本认证传递明文密码,而简要验证传递密码保护的验证令牌。集成Windows验证不是Internet标准而是一种私有验证协议。

60.   ASP.Net通过一个名为UserHttpContext属性来获取请求者的信息。User类型是IPrincipal,该接口位于System.Security.Principal,由WindowsPrincipalGenericPrincipal类实现。当使用Windows验证时Page.User指向WindowsPrincipal;而使用另外的验证时指向GenericPrincipalIPrincipal有一个IsInRole的方法,还有一个Identity的属性,该属性其实是IIdentity接口的引用。在aspx文件中确认调用者是否已经过验证:if(User.Identity.IsAuthenticated){…};还可以通过Request对象的IsAuthenticated属性;或者调用者的名称:string name=User.Identity.Name;对于Windows验证的用户,名称格式为domainname/username;

61.   ASP.Net使用调用者身份对aspx文件和其他ASP.Net文件类型执行ACL检验,而不论是否启用了模拟。也就是只要通过拒绝调用者读取文件就可以阻止任何调用者来检索aspx文件,但是如果调用者调用一个aspx文件,而这个aspx又以编程方式读取另一个文件,如果需要使用该调用者的标识对这次读取进行ACL校验,必须启用模拟。

62.   窗体验证通过使用Web.config文件来启用的。如<authentication mode=”Forms”> <forms loginUrl=”Login.aspx”> … </forms></authentication>;在需要隐藏的目录下同样设置Web.config文件,如<authorization> <deny users=”?” /> </authorization>,这代表了一个URL授权,”?”代表了匿名用户。FormsAuthentication.RedirectFromLoginPage方法返回当前登陆页面。

63.   窗体验证时可以使用roles来实现基于角色的安全。将数据库中角色映射到每个请求中的用户帐户,最好的地方是AuthenticateRequest事件,可以自定义Global.asax中处理该事件。

64.   窗体验证通常允许用户注销,调用FromsAuthentication.SignOut方法。它通过设置Cookie值为空来完成该操作。

65.   窗体验证只保护ASP.Net文件,它保护注册到ASP.Net的文件,如aspx,asmx等,但是不保护不属于ASP.Net的文件,如html文件等。

66.   Web服务是一种运行与Web服务器上、为调用者提供Web方法、侦听调用相应Web方法的HTTP请求命令并且执行Web方法返回调用结果的Web应用程序。大多数的Web服务要求通过包含SOAP信息的HTTP请求调用它们的Web方法。

67.   ASP.Net中,Web服务在asmx文件实现,它是一个ASP.NetHTTP处理程序;asmx文件由@WebService指令开头,该指令中至少包括一个Class属性,用来标识提供Web服务的类;Web服务类可以具有可选的WebService属性;要声明Web方法,只要用WebMethod属性标记Web服务类的公共方法。关于HtmlSOAP处理被.Net框架隐藏。

68.   WebService同样支持代码隐藏,类似与aspxascx等文件。

69.   Web服务类通常派生自WebService的类,属于System.Web.Services空间,它提供ApplicationContextSessionServerUser等属性,使得能够访问ASP.Net中的同名对象。WebMethod属性把一个方法标记为Web方法,同时它提供了一系列参数,类似与aspx中的指令。Web服务描述语言WSDL是一种机器识别语言,随WebService的发布而同时发布。

70.   完成WebService必须注意(1)因为查询字符串只限于传递简单的名称/值对,所以不能用HTTP GetPOSTWeb方法传递复杂的类型;(2)对于传递给Web方法的类或结构中声明的任意字段和属性,如果它们要在类或结构的实例被序列化的同时被序列化,就必须是public属性的。

71.   Web服务的发现机制有两种,DISCO(discovery)协议和UDDI协议。DISCO基于文件的机制,是面向本地Web服务的,即从Web服务器配置的DISCO文件得到一个可用的Web服务列表;UDDI是一个全局的Web服务路径,而其本身就是一个Web服务。

72.   Web服务代理(Web Service Proxy)是一个提供远程Web服务的本地表示的对象,对代理的调用实际上是通过代理找到它所代表的Web服务。.Net SDK自带的wsdl.exeWSDL的协定中生成了Web服务代理类。

73.   几种验证Web Service的使用者的方法:(1)为授权的调用者分配一个验证密钥,要求在每个Web Method中传递;(2)HTTP Authorization标头中传递用户名和密码;(3)SOAP标头传输用户名和密码或者其他形式的数据。可以在Global.asax中包含验证处理,不必每个Web Method验证同一个调用者。另外一个方法是通过配置IIS来对Web Service的目录进行验证。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值