第一章:Web Service 基础
1.Web Service 是可互操作的分布式应用程序。它以SOAP作为基本通信协议,使用HTTP和XML进行可以穿越防火墙的自由通信.
2.Web Service 优点:
(1).可以实现不同应用程序和在不同的系统平台上开发出来的应用程序之间相互通信。
(2).Web Service 具有普遍性,它使用HTTP和XML进行通信。
(3).Web Service 甚至可以穿越防火墙,真正实现自由通信。
(4).通过SOAP实现异地调用。
3.什么是SOAP?
SOAP 是 Web Service 的基本通信协议。它是在分散或分布式的环境中交换信息的,它是基于 XML 的协议。通过SOAP协议可以实现不同项目、不同站点、甚至异地的调用。
4.创建Web Service
右键添加新项------> Web 服务(MyBankService.asmx)--------->修改App_Code 文件夹下的 MyBankService.cs 添加自己所需的方法
注意:方法上面有[WebMethod]的是Web方法,一个[WebMethod]只能对它下面的一个方法有效。
5.调用Web Service
1.项目右键------->添加 Web 引用
2.在"URL"出填写要发布或是要调用的Web Service网址,单击前往按钮,就会看到一些方法名的链接
将右侧的"Web 引用名"改为MyBank(默认为localhost),“Web 引用名”是我们调用Web Service方法时用到。
如果不改名,则实例化Web Service时为localhost.MyBankService service=new localhost.MyBankService();
改名为MyBank后MyBank.MyBankService service=new MyBank.MyBankService();
3.代码中调用
MyBank.MyBankService service=new MyBank.MyBankService();
MyBank.PayResults result=service.Pay(user.Id,user.Password,int.Parse(txtSalary.Text));
第二章:使用AJAX改善用户体验(无刷新技术)
1.ASP.NET AJAX 核心组件:ScriptManager、UpdatePanel、UpdateProgress、Timer、ScriptManagerProxy
● ScriptManager:全局脚本控制器。在每个AJAX程序中都必须有一个,并且只能有一个,相当于在这个页面上注册框架
● UpdatePanel:更新面板。用来实现页面的无刷新效果
示例1:点击按钮实现无刷新显示当前时间
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="conditional">
<ContentTemplate>
<asp:Label ID="lblTime" runat="server" Font-Bold="true" ForeColor="Blue" ></asp:Lable><br/><br/>
<asp:Button ID="btnTime" runat="server" Text="显示时间"/>
</ContentTemplate>
</asp:UpdatePanel>
</div>
后台代码:
protected void btnTime_Click(object sender,EventArgs e)
{
lbltime.Text=DateTime.Now().ToString();
}
示例2:和示例1一样效果
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="conditional">
<ContentTemplate>
<asp:Label ID="lblTime" runat="server" Font-Bold="true" ForeColor="Blue" ></asp:Lable><br/><br/>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnTime" EventName="Click"/>
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnTime" runat="server" Text="显示时间"/>
</div>
● UpdateProgress:提示操作进度
示例:
<asp:UpdateProgress ID="UpdateProgress1" runat="server" >
<ProgressTemplate>正在加载数据,请稍候。。。</ProgressTemplate>
</asp:UpdateProgress>
● Timer:用于间隔一定的时间自动刷新页面或完成特定的任务。
示例:
<asp:ScriptManager ID="ScriptManager1" runat="server"/>
<asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick"></asp:Timer>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:GridView ID="gvGoldsInfo" runat="server">.........</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Time1" EventName="Tick"/>
</Triggers>
</asp:UpdatePanel>
后台代码:
protected void Timer1_Tick(object sender,EventArgs e)
{
.............
gvGoldsInfo.DataSource=ds;
gvGoldsInfo.DataBind();
}
扩展控件:
AutoComplete:智能自动提示功能
示例:
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Always">
<ContentTemplate>
<cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtTitle"
ServicePath="MyWebService/SearchHotBook.asmx" ServiceMethod="GetHotSearchByKeywords"
MinimumPrefixLength="1" EnableCaching="true" CompletionSetCount="10">
</cc1:AutoCompleteExtender>
<div style="text-align: center">
<font size="2">书名:</font><asp:TextBox ID="txtTitle" runat="server" Width="65px" Height="11px"></asp:TextBox>
<asp:Button ID="btnSearch" runat="server" Text="搜索" Height="23px" OnClick="btnSearch_Click"
Width="44px" /></div>
</ContentTemplate>
</asp:UpdatePanel>
注意:1.在使用了AJAX的页面中要调用Web Service,在Web Service的中要添加 [System.Web.Script.Services.ScriptService()] 特性
2.要调用的Web Service方法的两个参数名称和类型是固定的,返回类型必须是string[]
一个Web Service类
/// <summary>
/// SearchHotBook 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService()]
public class SearchHotBook : System.Web.Services.WebService
{
public SearchHotBook()
{
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
public string[] GetHotSearchByKeywords(string prefixText,int count)
{
return SearchKeywordManager.GetHotSearchKeywords(prefixText,count);
}
}
2.在使用了AJAX的页面中要提示信息要用ScriptManager.RegisterStartupScript(....);
第三章:扩展控件介绍
1.Accordion:用来实现菜单折叠效果(p56)
CollapsiblePanel:单个Panel的隐藏和显示(p63)
Rating:等级评价(p67)
Calendar:日历控件(p70) 不好用
ModalPopup:模式弹出窗口(p71)
Tabs:选项卡控件(p76)
第四张:缓存
1.缓存技术的原理是把访问频繁的数据以及需要大量处理时间来创建的数据存储在内存中
2.优点:使用缓存技术,可以大大提高程序的性能
缺点:(1).数据过期问题 (2).占用内存(服务器资源)
3.几种缓存技术:
整页缓存、页面部分缓存、应用程序缓存
● 整页缓存:<%@ OutputCache Duration="120" VaryByParam="Id;name" %> 在页面第二行添加
那么以Id或name作为参数传递的页面都将被缓存120秒
当我们需要缓存的数据随页面上某控件值的改变而改变时,可以使用VaryByControl属性
<%@ OutputCache Duration="120" VaryByParam="Id;name" VaryByControl="ddlCategories"%>
● 页面部分缓存:替换页面需要更新的部分
<div>
<asp:Substitution ID="Sub1" runat="server" MethodName="GetNum">
</div>
protected static string GetNum(HttpContext context)
{
DataTable dt=GetTicketsDataTable("3");
return dt.Rows[0]["num"].toString();
}
注意:Substitution控件MethodName属性调用的方法必须满足3个条件
(1).必须是静态方法。
(2).返回类型必须是string型。
(3).参数类型必须是HttpContext
● 应用程序缓存
示例:
public class MyBook
{
const string BOOKS_KEY = "books";
public static List<Book> GetAllBooks1()
{
if (HttpRuntime.Cache[BOOKS_KEY] == null)
{
List<Book> list = BookManager.GetAllBooks() as List<Book>;
HttpRuntime.Cache.Add(BOOKS_KEY, list, null,
DateTime.Now.AddMinutes(10), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, null);
return list;
}
else
{
return HttpRuntime.Cache[BOOKS_KEY] as List<Book>;
}
}
}
移除应用程序缓存:Cache.Remove("test1");
第五章:单元测试