520 likes | 749 Views
第 8 章 高级应用. 8.1 高级控件 8.2 用户控件 8.3 XML 的应用 8.4 应用程序环境设置 8.5 Web Service 简介 8.6 使用 ActiveX 控件 8.7 本章小结. 8.1 高级控件. 8.1.1 Calendar 控件 Calendar 控件的语法: <ASP: Calendar Options/> 其中 Options 的位置用于设置日历控件的各项属性、事件。 Calendar 控件的主要属性和事件如下:
E N D
第8章高级应用 • 8.1 高级控件 • 8.2 用户控件 • 8.3 XML的应用 • 8.4 应用程序环境设置 • 8.5 Web Service简介 • 8.6 使用ActiveX控件 • 8.7 本章小结
8.1 高级控件 • 8.1.1 Calendar控件 • Calendar控件的语法: • <ASP: Calendar Options/> • 其中Options的位置用于设置日历控件的各项属性、事件。 • Calendar控件的主要属性和事件如下: • l BackColor属性: 使用BackColor属性指定Calendar控件的背景色。 • l ForeColor属性: 表示显示的前景颜色。 • l BorderColor属性: 用于设置Calendar控件的边框颜色。 • l BorderStyle属性: 用于设置Calendar控件的边框样式 • l CellPadding属性: 表示单元格的内容和单元格的边框之间的空间量(以像素为单位)。 • l CellSpacing属性: 单元格间的间隔(以像素为单位)。 • l DayNameFormat属性:使用DayNameFormat属性指定一周中各天的名称格式。 • l FirstDayOfWeek属性:使用FirstDayOfWeek属性指定要在Calendar控件的第一天列中 • 显示的一周中的某天。 • 下面的示例展示如何使用FirstDayOfWeek属性来将第一天列设置为星期一。 • <%@ Page Language="VB" %> • <HTML><BODY> • <FORM runat="server">
8.1 高级控件 • <H3>Calendar Example</H3> • <ASP:Calendar id="calendar1" Runat="server" • FirstDayOfWeek="Monday"/> • </FORM> • </BODY></HTML> • lNextMonthText属性:该属性用来设置下一月导航控件的标题文本。默认值是">“。 • lPrevMonthText属性:使用PrevMonthText属性为前一月导航控件提供自定义文本。 • 下例展示如何使用NextMonthText属性为指向下一月和上一月的导航控件指定自定义文本。 • <%@ Page Language="VB" %> • <HTML><BODY> • <FORM runat="server"> • <H3>Calendar Example</H3> • <ASP:Calendar id="calendar1" Runat="server" • NextMonthText="Next" • PrevMonthText="Prev"/> • </FORM> • </BODY></HTML> • l NextPrevFormat属性:使用NextPrevFormat属性来指定Calendar控件上下个月和上个月 • 导航元素的格式。它的各种取值表示Calendar上的下个月和上个月按钮的不同样式。 • (1) CustomText:允许程序员为导航控件指定自定义文本。 • (2) ShortMonth:显示用三个字母缩写表示的月份名称。 • (3) FullMonth:显示完整的月份名称。
8.1 高级控件 • l SelectionMode 属性:使用SelectionMode属性指定Calendar控件上的日期选择模式。 • SelectionMode属性的各种取值及其说明 • lSelectedDate属性:使用SelectedDate属性获得或设置Calendar控件上的选定日期。 • l SelectMonthText属性:使用SelectMonthText属性来为选择器列中的月份选择元素提供 • 自定义文本。默认值是“>>”,它呈现为两个大于号(>>)。 • l SelectWeekText属性:使用SelectWeekText属性为选择器列中周选择元素提供自定义文本。l ShowGridLines属性:该属性指定是否用网格线分隔Calendar控件上的日期。 • l ShowNextPrevMonth属性:该属性指定Calendar控件是否在标题部分显示下个月和上个 • 月导航元素。 • l ShowTitle属性:使用ShowTitle属性指定是否显示标题部分。 • lTitleFormat属性:使用TitleFormat属性来指定标题部分的格式。TitleFormat属性的各种取值 及其说明见表。
8.1 高级控件 • TitleFormat属性的各种取值及其说明 • l TodaysDate 属性:使用TodaysDate属性来确定今天的日期。 • l TodayDayStyle属性:使用此属性来指定Calendar控件上今天日期的样式。 • l VisibleDate属性:它指定要在Calendar控件上显示的月份。 • lOnSelectionChanged方法:引发Calendar控件的SelectionChanged事件,用户可以为 SelectionChanged事件提供自定义处理程序。 • lOnVisibleMonthChanged方法:引发Calendar控件的VisibleMonthChanged事件,用户 • 可以为VisibleMonthChanged事件提供自定义处理程序。 • 【例8.1】使用Calendar控件实现以下功能:根据用户CheckBox控件的选择来改变Calendar控 • 件控件的外观。设计步骤如下: • (1) 在VS.NET中创建项目WebExamp8_1。 • (2) 设计项目主页面WebForm1.aspx,包含5个Web服务器控件,分别是:1个Label • 控件、1个Text控件和3个CheckBox控件。例子中所用控件的属性设置见表8.6。
8.1 高级控件 • 控件的属性设置 • (3) 在WebForm1.aspx界面的空白处双击,进入程序编辑窗口,在Page_load()事件处理中输 • 入以下程序代码: • Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles • MyBase.Load • message.Text = "今天的日期是" + Calendar1.TodaysDate • End Sub • 在CheckBox1_CheckedChanged ()事件处理中输入以下程序代码: • Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles CheckBox1.CheckedChanged
8.1 高级控件 • '控制是否显示前后月链接 • Calendar1.ShowNextPrevMonth = Not Calendar1.ShowNextPrevMonth • End Sub • CheckBox2_CheckedChanged ()事件处理中输入以下程序代码: • Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles CheckBox2.CheckedChanged • '控制是否显示表头 • Calendar1.ShowTitle = Not Calendar1.ShowTitle • End Sub • CheckBox3_CheckedChanged ()事件处理中输入以下程序代码: • Private Sub CheckBox3_CheckedChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles CheckBox3.CheckedChanged • '控制是否显示网格线 • Calendar1.ShowGridLines = Not Calendar1.ShowGridLines • End Sub • Calendar1_SelectionChanged ()事件处理中输入以下程序代码: • Private Sub Calendar1_SelectionChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles Calendar1.SelectionChanged • message.Visible = True • message.Text = "您所选中的日期是" + Calendar1.SelectedDate • End Sub
8.1 高级控件 • (4)编译、运行程序。执行结果如图所示。 • (a)程序运行初始显示(b)不显示前后月链接和表格线的显示 • (c)不显示表头和表格线的显示 • 程序运行结果
8.1 高级控件 • 8.1.2 AdRotator控件 • 使用AdRotator控件,应首先定义一个XML格式的文本文件,用于说明广告的细节。 • AdRotator控件的语法结构: • <ASP:AdRotator Id="Value" AdvertisementFile="AdvertisementFile" KeyWordFilter="KeyWord" Target="Target" OnAdCreated="OnAdCreatedMethod" Runat="server" /> • AdRotator控件的主要属性和事件如下: • lAdvertisementFile属性:AdRotator控件使用单独的XML公布文件存储公布信息。 • XML文件包含的预定义属性见下表。
8.1 高级控件 • l KeywordFilter属性:使用KeywordFilter属性根据指定关键字筛选广告公布。 • l Target属性:使用Target属性来指定当单击AdRotator控件时,显示所链接到的Web页 • 的内容的目标窗口或框架。 • l OnAdCreated方法:用于设置在界面上创建AdRotator控件时触发事件的处理方法名称。 • 【例8.2】使用AdRotator控件在“记事本”中创建一个定义两则广告的说明文件(ad.xml)。文件 • 内容如下所示: • <?xml version=”1.0”?> • <Advertisements> <Ad> <ImageUrl>c:\image1.jpg</ImageUrl> <NavigateUrl>http://www.microsoft.com</NavigateUrl> <AlternateText>MicrosoftMainSite</AlternateText> <Impressions>80</Impressions> <Keyword>Topic1</Keyword> </Ad> <Ad> <ImageUrl>c:\image2.jpg</ImageUrl> <NavigateUrl>http://www.wingtiptoys.com</NavigateUrl> <AlternateText>WingTipToys</AlternateText> <Impressions>80</Impressions> <Keyword>Topic2</Keyword> </Ad> </Advertisements>
8.1 高级控件 • 然后利用AdRotator控件创建广告横幅,显示ad.xml文件中定义的广告: • 在Web页中添加2个AdRotator控件(AdRotator1和AdRotator2),将它们的 • AdvertisementFile属性设置为ad.xml,AdRotator1的KeyWordFilter属性设置为Topic1,AdRotator1的KeyWordFilter属性设置为Topic2。运行结果如图所示。 • (a) 鼠标移到AdRotator1时的显示(b) 鼠标移到AdRotator2时的显示 • 程序运行结果 • 8.1.3 验证控件 • 在ASP.NET中,提供了6种验证控件自动进行数据的有效性验证,分别是: • (1) CompareValidator控件 (2) RangeValidator控件 (3) RegularExpressionValidator控件 • (4) ValidationSummary控件 (5) CustomValidator控件 (6) RequiredFieldValidator控件
8.1 高级控件 • 1. 基本验证控件属性 • 每种验证控件都有自己的属性,下表列出了6种验证控件共有的几个主要属性。
8.1 高级控件 • 2. CompareValidator控件 • 比较验证控件的语法: • <ASP:CompareValidator Options> </ASP:CompareValidator> • 其中Options处用于对比较验证控件的各种属性进行设置。 • CompareValidator控件的主要属性: • l ValueToCompare属性:用于设置要与用户输入到所验证的输入控件中的值进行比较的常数值 • l ControlToCompare属性:使用ControlToCompare属性来指定要与所验证的输入控件进行比 较的输入控件,如TextBox。 • l Operator属性:使用Operator属性指定要执行的比较操作。下表列出了可能的比较操作。
8.1 高级控件 • 3. RangeValidator控件 • 范围验证控件的语法: • <ASP: RangeValidator Options> </ASP: RangeValidator > • 其中Options处用于对范围验证控件的各种属性进行设置。 • RangeValidator控件的主要属性包括: • l MinimumValue属性和MaximumValue属性:分别指定有效范围的最小值和最大值。 • l Type属性:用于指定要比较的值的数据类型。 • 4. RequiredFieldValidator控件 • 必须字段验证控件的语法: • <ASP: RequiredFieldValidator Options> </ASP: RequiredFieldValidator > • 其中Options用于对必须字段验证控件的各种属性进行设置。 • 5. RegularExpressionValidator控件 • 正则表达式验证控件的语法: • <ASP: RegularExpressionValidator Options> </ASP: RegularExpressionValidator> • 其中Options用于对正则表达式验证控件的各种属性进行设置。 • 6. CustomValidator控件 • 自定义证控件的语法: • <ASP: CustomValidator Options> </ASP: CustomValidator>
8.1 高级控件 • 其中Options用于对自定义验证控件的各种属性进行设置。 • 7. ValidationSummary控件 • 验证总结验证控件的语法: • <ASP: ValidationSummary Options> </ASP: ValidationSummary > • 其中Options用于对验证总结验证控件的各种属性进行设置。 • ValidationSummary控件的主要属性如下: • l DisplayMode属性:使用该属性指定ValidationSummary控件的显示格。 • l HeaderText属性:用于设置显示错误信息列表的表头。 • l ShowSummary属性:用于设置是否内联显示验证摘要。 • 【例8.3】使用验证控件设计登录界面,利用验证控件来实现对输入内容进行自动验证。 • 要求: 用户名必须输入,口令和确认口令必须一致,年龄必须在18~60岁之间, • Email地址 格式必须符合Email地址的写法规则,否则显示验证错误信息。 • (1) 在VS.NET中创建项目WebExamp8_3。 • (2) 设计项目主页面WebForm1.aspx,包含17个控件,分别是:6个Label控件、5个验证 • 控件、5个TextBox控件和1个Button控件。 • 其中6个标签,用于显示提示信息,标签文本分别为:验证控件示例、用户名: • 、口令:、确认口令:、年龄:、email地址:。 • (3) 编译、运行程序。在各文本框中输入不同内容,显示不同运行结果,具体见图。
8.1 高级控件 • (a)不输入用户名、口令和确认口令不符(b)年龄不在18~60之间、ema il格式不对 • 程序运行结果
8.2 用户控件 • 8.2.1 将Web窗体页转换为用户控件 • 将Web窗体页转换为用户控件的步骤是: • (1) 创建一个基本的Web窗体页; • (2) 对代码进行少量更改,主要修改包括: • l将代码隐藏基类从Page更改为UserControl • l从.aspx文件中删除<HTML>、<Head>、<BODY>和<FORM>标记 • l将ASP.NET指令类型从@Page更改为@Control • l更改Codebehind属性来引用控件的代码隐藏类文件ascx.vb • l将.aspx文件扩展名更改为.ascx • (3) 测试控件,方法是:创建一个新的Web窗体页,向其添加该控件,然后在浏览器中打开该页。 • 【例8.4】创建一个基本的Web窗体页,该页向用户显示一个个性化的欢迎信息,将该 • Web窗体页转化为Web用户控件。 • (1) 在VS.NET中创建项目WebExamp8_4。 • (2) 添加Web窗体页(welcome.aspx),各控件的主要属性设置见表。 • 将下面的代码添加到Button1_Click过程: • Label2.Text = "Hi " & TextBox1.Text & ", welcome to ASP.NET!" • 按CTRL+F5组合键运行该Web窗体页并对其进行测试,运行效果如图所示。
8.2 用户控件 • 控件的属性设置图 窗体页的运行效果 • (3) 将Web窗体页转换为用户控件,方法是: • ① 单击设计器窗口底部的“HTML”选项卡切换 • 到HTML视图,HTML文件如下所示: • <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" • Inherits="usercontrol.WebForm1"%> • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> • <HTML> <Head> <Title>WebForm1</Title> • <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.0"> • <meta name="CODE_LANGUAGE" content="Visual Basic 7.0"> • <meta name="vs_defaultClientScript" content="JavaScript"> • <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> • </Head>
8.2 用户控件 • <Body MS_POSITIONING="GridLayout"> • <FORM Id="Form1" Method="post" Runat="server"> • <ASP:Label Id="Label1" Style="Z-INDEX: 101; LEFT: 32px; POSITION: • absolute; TOP: 17px" Runat="server">Enter name:</ASP:Label> • <ASP:Button Id="Button1" Style="Z-INDEX: 104; LEFT: 120px; POSITION: • absolute; TOP: 59px" Runat="server" Text="Enter"></ASP:Button> • <ASP:TextBox Id="TextBox1" Style="Z-INDEX: 103; LEFT: 138px; POSITION: • absolute; TOP: 15px" Runat="server"></ASP:TextBox> • <ASP:Label Id="Label2" style="Z-INDEX: 102; LEFT: 37px; POSITION: • absolute; TOP: 102px" Runat="server"></ASP:Label> • </FORM> • </BODY> • </HTML> • ② 从.aspx文件中删除<HTML>、<!doctype>和<Head>标记及内部内容、<BODY>和<FORM> 标记。 • ③将基类从System.Web.UI.Page 更改为System.Web.UI.UserControl,然后将Public Class声明 从WebForm1更改为welcome。 • ' Visual Basic • Public Class welcome • Inherits System.Web.UI.UserControl • ④保存并关闭代码隐藏文件和.aspx文件。
8.2 用户控件 • ⑤测试用户控件。通过创建一个新的Web窗体页并将控件添加到该页,可以对用户控件进行 测试,方法是: • l在“项目”菜单上,单击“添加Web窗体”。 • l将Name更改为WelcomeTest.aspx并单击“打开”。 • l将welcome.ascx从解决方案资源管理器拖放到设计图面上。 • l在解决方案资源管理器上右击WelcomeTest.aspx,然后在快捷菜单上单击“设为起始页”。 • l按F5键运行该Web窗体页。 • 8.2.2 直接建立用户控件 • 在ASP.NET中,可以它所提供的命令直接建立用户控件。具体步骤为: • 1. 新建或打开项目。 • 2. 在“项目”菜单中选取“加入Web用户控件”命令。弹出“添加新项”对话框,如下图所示。
8.2 用户控件 • 3. 在“添加新项”对话框中的模板中选中“Web用户控件”,在“名称”文本框中输入用户控件 • 的文件名(扩展名必须是.ascx),然后按下“打开”按钮。 • 4. 在设计器中,像设计普通Web页的方法来设计用户控件。 • 5、 编译、测试、存盘即可。 • 8.2.3 向Web窗体页添加用户控件 • 向Web窗体页添加用户控件的方法: • l在Web窗体设计器中,打开要将该控件添加到的Web窗体页,并确保该页以“设计”视图显示。 • l在解决方案资源管理器中选择用户控件的文件,并将其拖到该页上。 • 【例8.5】 在项目中直接建立用户控件。本例创建一个用户控件,它的功能是:在Textbox 中输入数据库名和该数据库中的数据表名,在Datagrid中显示数据表中的数据。 • (1) 新建项目usecontrol。 • (2) 在“项目”菜单中选取“加入Web用户控件”命令,将弹出“添加新项”对话框。 • (3) 在“添加新项”对话框中的模板中选中“Web用户控件”,在“名称”文本框中输入 dataaccess.ascx,然后按下“打开”按钮。 • (4) 在设计器中设计用户控件。 • l窗体页中用到6个Web服务器控件,分别是:2个Label控件、2个TextBox控件、1个DataGrid 控件和1个Button控件,如图8.6所示。 • l窗体页中各控件的主要属性见表8.14。
8.2 用户控件 • 户控件界面设计 控件的属性设置 • l编写程序代码 • 双击Button1按钮,在Button1_Click()事件处理中输入以下程序代码: • Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) • Handles Button1.Click • Dim MyCommand As OleDbDataAdapter • Dim String1, name1, name2 As String • Dim MyDataSet As DataSet • name1 = database.Text.ToString & ".MDB" • name2 = biao.Text.ToString • String1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(name1) • MyDataSet = New DataSet() • MyCommand = New OleDbDataAdapter("Select * from " + name2, String1
8.2 用户控件 • MyCommand.Fill(MyDataSet, name2) • myDataGrid.DataSource = MyDataSet • myDataGrid.DataMember = name2 • myDataGrid.DataBind() • End Sub • l编译、测试用户控件。 • (5) 使用用户控件。 • 数据库teacher.mdb中teacher表中的数据内容见图。运行结果如图所示。 • teacher表中的数据内容 程序运行结果
8.3 XML的应用 • 8.3.1 什么是XML • XML是可扩展标记语言,是一种存储数据的方法。XML也是一种元标记语言,本身 • 并没有任何标记。 • 8.3.2 使用XML的原因 • 以下是有关XML与HTML之间关系的几点说明: • l XML不是要替换HTML,实际上XML可以视作对HTML的补充。 • l与HTML相似,XML不进行任何操作。 • l与HTML不同,XML标记由架构或文档的作者定义,并且是无限制的。 • 8.3.3 标记和元素 • 下面创建一个XML文档,用于保存图书信息。 • 【例8.6】创建一个用于保存图书信息的XML文档(文件名为aa.xml)。方法是: • 创建一个文本文件,输入下列数据: • 1:<?xml version="1.0"?> • 2:<books> • 3: <book> • 4: <author>Carson</author> • 5: <price format="dollar">31.95</price> • 6: <pubdate>05/01/2001</pubdate>
8.3 XML的应用 • 7: </book> • 8: <book> • 9: <author>Mary</author> • 10: <price format="dollar">71.50</price> • 11: <pubdate>04/02/2002</pubdate> • 12: </book> • 13:</books> • 保存数据,文件扩展名定义为xml。 • 例8.6的解释: • l第1行:<?xml version=“1.0”?>,该句是XML声明,表明这个文档是一个XML文档,且说 明这个XML文档的版本为1.0。 • l在第2行和第13行使用了<books>开标记和</books>闭标记。这个标记是根标记,因为这个 文档中的所有数据都包含在这两个标记中。 • l在第3行和第7行使用了<book>开标记和</book>闭标记,来表示一本书的信息。 • l在第8行~第15行定义了另一本书的信息。 • aa.xml的显示结果如右图所示。
8.3 XML的应用 • 8.3.4 在ASP.NET中使用XML • 1. 用DataSet的WriteXML方法将数据写入XML文档。 • 在DataSet的WriteXML方法中,只要指明要保存XML数据的文件的路径和文件名,就 • 可以把DataSet中的数据以XML的格式保存在XML文档中。 • 【例8.7】 把数据库中的数据保存在一个XML文档中。 • (1) 创建一个ASP.NET应用程序,在Web页的Page_Load事件中编写如下程序代码: • Sub Page_Load(ByVal Sender As Object, ByVal e AsEventArgs) • DimMyCommand As OleDbDataAdapter • Dim String1 As String • Dim MyDataSet As DataSet '定义1个DataSet实例MyDataSet • String1="Provider=Microsoft.Jet.OLEDB.4.0;Data Source = "&Server.MapPath("xs.MDB") • MyCommand = New OleDbDataAdapter("Select * from xs",String1) • ‘取出xs表中的所有数据 • MyDataSet=New DataSet() • MyCommand.Fill(MyDataSet,“xs”) ‘将所有数据放在MyDataSet中 • MyDataSet.WriteXml(“c:\student.xml”) ‘调用WriteXml方法将MyDataSet中的 • ’数据写入C:盘的student.xml文件中 • MyDataGrid.DataSource = MyDataSet • MyDataGrid.DataMember = "xs“ • MyDataGrid.DataBind() • End Sub
8.3 XML的应用 • (2) XS数据库中xs表中的数据如图所示。 xs表中的数据 • (3) 执行程序,在C盘根目录下创建了 • 文件student.xml,在记事本中打开, • 文件内容显示如下: • <?xml version="1.0" standalone="yes"?> • <NewDataSet> <xs> <XM>张三</XM> <XH>0001</XH> <XB>女</XB> <JG>南京</JG> </xs> <xs> <XM>李四</XM> <XH>0002</XH> <XB>男</XB> <JG>河北</JG> </xs> <xs> <XM>王涛</XM> <XH>0003</XH> <XB>男</XB> <JG>上海</JG>
8.3 XML的应用 • </xs> <xs> <XM>张影</XM> <XH>0004</XH> <XB>女</XB> <JG>河南</JG> </xs> </NewDataSet> • 2. 用DataSet的ReadXML方法读出XML文档中的数据 • 使用DataSet的ReadXML方法,只要指明要读取的XML文档的路径和文件名,就可以很 • 方便地读出XML文档中的所有数据。例如: • Dim MyDataSet As DataSet • MyDataSet.ReadXml(server.mappath("student.xml")) MyDataGrid.DataSource = MyDataSet.tables(0).DefaultVie • MyDataGrid.DataBind() • 上述程序段,实现了将当前路径下的student.xml文档内容通过DataSet的ReadXML方法读出,并将读出数据在DataGrid控件中显示的功能。
8.4 应用程序环境设置 • 8.4.1 了解ASP.NET配置 • 1. Machine.config文件和Web.config 文件 • ASP.NET的所有配置文件都是XML格式的文件。Machine.config 包含这台服务器上 • 所有ASP.NET应用程序的默认设置,包含整个计算机范围内的程序集绑定、内置远程处理 • 信道等的配置设置。在一个系统中,只能有一个Machine.config文件,而可以有多个 • web.config文件。Machine.config文件和Web.config 文件在语法上没有任何区别。 • 2. 配置文件中常用的标记 • 每个配置文件都包含XML标记和子标记的嵌套层次结构,这些标记带有指定配置设 • 置的属性。注意:XML标记和属性是区分大小写的。 • 一般,配置文件的XML语法格式如下所示: • <configuration> • <configSections> • <section name="[sectionname]" • type="[class]" /> • <sectionGroup name="mySectionGroup"> • <section name="[mySection[" • type="[class]" /> • </sectionGroup> • </configSections> • </configuration>
8.4 应用程序环境设置 • <configuration>和</configuration>标记间的配置信息可分为下列三种不同类型的元素: • l配置节处理程序声明 • 配置节处理程序声明位于配置文件顶部<configSections>和</configSections>标记之间。 • l配置节组 • 节标记可以使用节组标记来进一步限定,以便节划分成逻辑组。 • l配置节设置区域 • 配置节设置区域包含实际的配置设置。 • 注意:是否使用配置节组完全由用户决定,并不一定要使用节组标记来划分节标记。 • 其他常用的元素标记及其功能见下表
8.4 应用程序环境设置 • 下面的Web.config文件示例声明两个配置<section>处理程序,一个是管理应用程序设置, • 另一个是管理会话状态。 • <configuration> • <configSections> • <section name="appSettings" • type="System.Configuration.NameValueFileSectionHandler, • System, Version=1.0.3300.0, • Culture=neutral, PublicKeyToken=b77a5c561934e089" /> • <section name="sessionState" • type="System.Web.SessionState.SessionStateSectionHandler, • System.Web, Version=1.0.3300.0, Culture=neutral, • PublicKeyToken=b03f5f7f11d50a3a" • allowDefinition="MachineToApplication" /> • </configSections> • <appSettings> • <add key="dsn" value="localhost;uid=MyUserName;pwd=;" /> • <add key="msmqserver" value="server\myqueue" /> • </appSettings> • <sessionState cookieless="true" timeout="10" /> • </configuration>
8.4 应用程序环境设置 • 8.4.2 使用缓存 • ASP.NET提供了强有力的缓存架构。除此之外,ASP.NET还提供了下列缓存: • l输出缓存 • l碎片缓存 • l 数据缓存 • 1. 输出缓存 • 为了以更高的效率显示动态生成的页面,ASP.NET提供了输出缓存。 • 2. 碎片缓存 • 如果很多页面中都有相同的部分,ASP.NET可以缓存页面的这个部分,而不需缓存整 • 个页面,这就是碎片缓存。 • @ OutputCache的语法: • <%@ OutputCache Duration="#ofseconds" Location="Any | Client | Downstream | Server | • None" VaryByControl="controlname" VaryByCustom="browser | customstring" • VaryByHeader="headers" VaryByParam="parametername" %> • @ OutputCache的属性如下: • (1)Duration属性(2)Location属性 (3)VaryByCustom属性 • (4)VaryByHeader属性 (5)VaryByParam属性 (6)VaryByControl属性
8.4 应用程序环境设置 • 3. 数据缓存 • 数据缓存是用来保存信息的缓存。使用ASP.NET缓存则可以实现全局的数据传送。另 • 外与Application相比,使用缓存可以实现自动的锁定 • ASP.NET缓存的使用方法与Application和Session对象非常类似。例如,要在缓存中增 • 加一个数据项可以使用下面的语句: • Cache("name")="Tony" • 或者 • Cache.insert("name","Tony") • 这样,在ASP.NET缓存中就增加了一个名字为name的数据,它的值是Tony。若要在 • 其他的页面中访问它,可以通过Cache("name")得到。 • 为了避免出现缓存不足的现象,应及时清理缓存中保存的不再有用的数据,具体删 • 除的方法是: • cache.remove("name")
8.5 Web Service简介 • 8.5.1 了解Web服务 • Web服务是具有各种程序功能的众多单元,通过标准化的通信协议(HTTP)及数据 • 格式(XML)公开给客户端。 • 可以把Web服务理解成应用程序当中所使用的完成特定任务的一个函数。 • 与组件类似,Web服务表示可以重复使用的黑匣功能,而无需关心服务实现的方式。 • l使用XML构架:Web服务使用XML作为表示数据的标准方法。 • l SOAP协议:简单对象访问协议(SOAP)是一个用来在分散/分布式的环境中交换 • 信息的简单协议,它是一个基于XML的协议。 • l服务描述语言---WSDL • l UDDI:规范定义了一个发布和发现有关Web服务信息的标准方法。 • 8.5.2 创建Web服务 • 1. 声明Web服务 • 声明Web服务的语法: • <%@ WebService Language="VB" Class="Classname"%> • 2. 创建Web服务类 • 每个.asmx文件都与一个单独的类相关联,Web服务类定义的语法如下所示: • Imports System.Web.Services
8.5 Web Service简介 • <WebService(Namespace := “http://tempuri.org/”)> _Public Class ClassNam Inherits System.Web.Services.WebService ‘Web服务公开的方法End Class • 说明: • lImports System.Web.Services:用Imports语句以导入System.Web.Services命名空间。 l <WebService()>属性指定XML命名空间:基于XML命名空间的Web服务使用XML命 • 名空间对它们进行唯一标识 。 l用<WebMethod()>属性公开方法:声明了实现Web服务的后,需要添加一个或多个为 • Web服务提供各种功能的方法。 • 将<WebMethod()>属性添加到ASP.NET方法中的语法为: • <WebMethod()>_ • Public Function MethodName() As ReturnType '方法代码End Function下面以一个实例介绍如何创建ASP.NET Web服务。 • 【例8.8】 创建一个可运行的Web服务。此服务中有一个方法,方法的功能就是返回字符串 “Hello ,World!”。创建ASP.NET Web服务项目的步骤: • (1) 在“文件”菜单上指向“新建”,然后单击“项目”。 • (2) 在“新建项目”对话框中,选择“Visual Basic 项目”单击“ASP.NET Web服务”图标。
8.5 Web Service简介 • (3) 输入要在其中开发XML Web services 的Web服务器地址,默认情况下,项目使用本地 • 计算机,即http://localhost,并将helloservice1指定为目录名。如图所示。 • 创建ASP.NET Web服务 在代码编辑器中查看后台代码 • (4) 单击“确定”创建项目。 • (5) 选择“视图”“代码”选项,VS.NET将显示程序的源代码。如图8.12所示。 • (6) 添加一个名为HelloWorld的方法的方法定义,返回类型为String,返回的字符串 • 为“Hello World!” • <WebMethod()>_ • Public Function HelloWorld() As String • return "Hello World!" • End Function
8.5 Web Service简介 • (7) 保存文件。 • (8) 输入Service1.asmx文件的URL地址,在浏览器中浏览该Web服务。该Web服务的初始 • 请求的输出结果见图。 • Web服务的初始请求的输出 WSDL协定的部分内容 • (9) 单击图中的“服务说明”链接,ASP.NET会返回描述该Web服务的WSDL协定,显示 • 的部分内容见图。 • (10) 单击图中的“HelloWorld”操作的链接。部分显示结果见图。 • (11) 单击图中的“调用“按钮,会在一个新的浏览器窗口中显示调用该方法返回的XML • 结果。输出结果见图8.16。 • 以上就是通过在.asmx文件中定义Web服务类来实现Web服务的过程。
8.5 Web Service简介 • 请求与响应的语法调用返回的XML结果 • 8.5.3 公布Web服务 • 公布Web服务有两种解决方案:用发现文档公布Web服务和通过UDDI公布Web服务。 • 1. 用发现文档公布Web服务 • 发现文档是一个基于XML的文档,包含对Web服务和其他发现文档的引用。发现文件的 • 扩展名为.disco,在ASP.NET中创建Web服务时自动生成该文件。 • 2. 通过UDDI公布Web服务 • 可以通过使用UDDI的方法公布Web服务。这种方法是由Ariba、IBM和Microsoft等多家 • 厂商共同发起的,专门用于提供一个基于Internet的业务注册表。
8.5 Web Service简介 • 8.5.4 使用Web服务 • 在Visual Studio.NET中创建XML Web服务客户程序可以通过需要以下步骤: • l使用模板创建客户程序项目。 • l使用Visual Studio.NET提供的工具创建访问XML Web服务的代理类并把它添加到客 户程序项目中。 • l在客户程序的代码中创建代理类实例并通过它来调用XML Web服务的方法。 • 【例8.9】创建一使用例8.8中所建helloservice1 Web服务的客户程序。创建步骤: • (1) 在Visual Studio.NET中,选择“文件”“新建”“项目”。显示新建项目对话框。 • (2)在新建项目对话框中,单击Visual Basic Project,在模板中点击ASP.NET Web • 应用程序。 • (3) 将1个Button控件和1个TextBox控件拖放到网页上,设置Button控件的Text属 • 性为call helloservices。 • (4) 选择“项目”“添加Web引用”选项,Visual Studio.NET将会显示如图8.17所示 • 的“添加Web引用”对话框。 • (5) 在图中的地址字段中,输入helloservice1 Web服务的WSDL文件的URL。 • 输入localhost/ helloservice1/service1.asmx?WSDL并按回车键。在对话框中将加载文件的内容,如图所示。点击“添加引用”按钮。
8.5 Web Service简介 • “添加Web引用”对话框 • 在对话框中将加载WSDL文件的内容程序的运行结果
8.5 Web Service简介 • (6) 在Button1_Click事件中编写如下代码: • Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) • Handles Button1.Click • Dim Webserviceobject As New localhost.Service1() ‘创建localhost.Service1()的实例 • Webserviceobject • Try • TextBox1.Text = Webserviceobject.HelloWorld() ‘调用Service1的HelloWorld方法 • Catch ex As Exception ‘发现异常在TextBox1中显示异常信息 • TextBox1.Text = "Exception in Web service:" & ex.Message ‘ • End Try • End Sub • (7) 编译、运行程序。单击“call helloservices”按钮,则调用调用Service1的HelloWorld方法, • 在TextBox中显示“Hello World!”,如图所示。 • 【例8.10】综合实例。程序功能:完成公司招聘信息的发布和各公司招聘信息的浏览。发布的 • 招聘信息存储到C:盘的data.xml文件中,浏览各公司的招聘信息是将data.xml文件 • 中的数据读出来,显示在DataGrid中。 • 1) 在VS.NET中创建项目WebExamp8_10。 • 2) 创建项目中的窗体页:本例设计了4个窗体页、1个用户控件和1个Web服务程序。 • 4个窗体页分别是:
8.5 Web Service简介 • (1)login.aspx:登录界面(2)welcome.aspx:欢迎进入系统界面 • (3)zhaopin.aspx:某公司招聘信息发布页面 (4)browse.aspx:浏览各公司招聘信息页面 • 1个用户控件: • navigator.ascx:该用户控件包括welcome.aspx、zhaopin.aspx和browse.aspx窗体页都包含的标 • 题和导航条。 • 1个Web服务程序:该Web服务完成将公司发布的招聘信息写入data.xml文件。 • (1) Web服务的设计 • 在“文件”菜单上指向“新建”,然后单击“项目”。 • l在“新建项目”对话框中,选择“Visual Basic 项目”单击“ASP.NET Web 服务”图标。 • l输入要在其中开发XML Web services的Web服务器地址,默认情况下,项目使用本地 • 计算机,即http://localhost,并将writefile指定为目录名。 • l单击“确定”创建项目。 • l选择“视图”菜单的“代码”,输入如下所示的程序: • Imports System • Imports System.IO • Imports System.Data • Imports System.Data.OleDb • Imports System.IO.FileStream • Imports System.Web.Services
8.5 Web Service简介 • <WebMethod()> Public Function writexmldata(ByVal company As String, ByVal skills As String, • ByVal education As String, ByVal experience As String, ByVal salary As String) As Boolean • Dim mydataset As New DataSet() • Dim filePath As String • Dim newrow As DataRow • Dim fin As FileStream • Dim fout As FileStream • '定义输入流文件变量fin,内容为c:\data.xml文件内容。 • fin = New FileStream("c:\data.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite) • mydataset.ReadXml(fin) '将流文件 fin内容读入数据集mydataset • fin.Close() • newrow = mydataset.Tables(0).NewRow • newrow("公司名称") = company • newrow("技术要求") = skills • newrow("学历要求") = education • newrow("工作经验") = experience • newrow("工资待遇") = salary • mydataset.Tables(0).Rows.Add(newrow) '在mydataset加入1行 • fout = New FileStream("c:\data.xml", FileMode.Open, FileAccess.Write, • FileShare.ReadWrite) • mydataset.WriteXml(fout) '将增加1行后的数据重新写入c:\data.xml
8.5 Web Service简介 • fout.Close() • Return True • End Function • (2) 用户控件的设计 • l新建项目。 • l在“项目”菜单中选取“加入Web用户控件”命令。弹出“添加新项”对话框。 • l在“添加新项”对话框中的模板中选中“Web用户控件”,在“名称”文本框中输入 navigator.ascx,然后按下“打开”按钮。 • l在设计器中,设计用户控件。 • 窗体页中包含4个Web服务器控件,分别是:1个Image控件和3个HyperLink控件, • 界面如图所示。窗体页中各控件的属性见表。 • 各控件的属性设置
8.5 Web Service简介 • 用户控件界面 • (3) 窗体页设计 • 选择“项目”菜单中的“添加Web窗体……”,在“添加新项”对话框的名称中输入login.aspx,单击“打开”按钮,拖动控件到窗体进行设计。用同样的方法加入welcome.aspx、zhaopin.aspx • 和browse.aspx窗体。 • login.aspx窗体界面如图所示,其中用到的控件及其属性设置见下表。
8.5 Web Service简介 • 登录界面设计 • 双击entry按钮,在entry _Click ()事件处理中输入以下程序代码: • Private Sub entry_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles • entry.Click • If (name.Text = "aaa" And password.Text = "123456") Then • Response.Redirect("welcome.aspx") • Else • message.Text = "用户名或密码错误,请重新输入。" • name.Text = "" • password.Text = "" • End If • End Sub
8.5 Web Service简介 • 双击cancel按钮,在cancel _Click ()事件处理中输入以下程序代码: • Private Sub cancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) • Handles cancel.Click • name.Text = "" • password.Text = "" • End Sub • lwelcome.aspx窗体设计 • 从解决方案中将navigator.ascx用户控件拖动到窗体中。再向窗体中加入1个label控件, 该控件的text属性设置为“欢迎使用招聘信息管理系统”。welcome.aspx窗体界面如下图所示。 • lzhaopin.aspx窗体设计 • 从解决方案中将navigator.ascx用户控件拖动到窗体中。 • zhaopin.aspx窗体界面如右图所示,其中用到的控件及 • 其属性设置见表8.18。
8.5 Web Service简介 • Button1_Click ()事件处理中输入以下程序代码: • Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles • Button1.Click • Dim ws As New localhost.Service1() • If ws.writexmldata(gsmc.Text, jsyq.Text, xlyq.Text, jsyq.Text, gzdy.Text) Then • message.Text = "招聘信息已成功发布" • End If • End Sub • lbrowse.aspx窗体设计 • 从解决方案中将navigator.ascx用户控件拖动到窗体中。 • 在WebForm1.aspx界面的空白处双击,进入程序编辑窗口,在Page_load()事件处理中输 • 入以下程序代码: • Imports System.Data • Imports System.Data.OleDb • Imports System • Imports System.IO • Imports System.IO.FileStream • Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles • MyBase.Load • Dim mydataset As New DataSet()
8.5 Web Service简介 • Dim filePath As String • Dim newrow As DataRow • Dim fin As FileStream • Dim fout As FileStream • fin = New FileStream("c:\data.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite) • mydataset.ReadXml(fin) • fin.Close() • DataGrid1.DataSource = mydataset • DataGrid1.DataBind() • End Sub • 4) 编译、运行程序 • 将login.aspx设为起始页后,运行程序。登录界面(图8.24(a)),欢迎界面 ,招聘 • 信息发布界面 ,所输信息便保存到C:\data,xml文件中,各公司的招聘信息如图 。 • (a) 登录运行界面(b) 欢迎界面
8.5 Web Service简介 • (c) 招聘信息发布界面(d) 各公司的招聘信息显示 • 程序运行结果