第十一章:跟踪、缓存、Asp.net中配置应用程序
跟踪
1)利用asp.net提供跟踪技术用户可以察看某个asp.net页面中请求的详细信息。
包含表单中所有Web控件的信息,session,cookie,application等信息
2)利用asp.net跟踪技术可以快速的了解一个asp.net页面的执行过程,细节,从而
帮助我们排除页面中错误
3)跟踪的分类
A:页面级跟踪:<%@ page trace="true" tracemode="指定模式"%>
B:可以通过Trace.warn("信息")来把用户自定义的消息显示在跟踪的结果中,会以红色字体显示
C:应用程序级跟踪:可以对一个Web应用程序的所有页进行跟踪
在web.config文件中进行配置
<configration>
<system.web>
<trace enabled="true" pageoutput="true"/>
</system.web>
</configration>
缓存
什么是缓存:
1)缓存技术会把访问频率比较高,或者量大的数据暂存在内存中
2)以后在访问时不需要重新创建,可以直接从缓存中去。
3)所以通过缓存技术可以显著提高程序的性能
4)记住:一旦应用程序停止或重新启动,重新编译,缓存就会消失
缓存的分类:
A:输出缓存:
对整个页面进行缓存的设置,把整个页面缓存起来。
1)<%@ OutputCache Duration="120"> 表示把整个页面级存120秒。
在页面的Load事件里面写上如下代码:
response.write(DateTime.now.tostring());
结果:在打开的120秒内不断访问页面,会发现时间没有变化,因为是从
缓存中取出的。但是如果在120秒之后来访问此时时间会发生改变,
因为缓存会更新,从服务器中去页面。但是在接下来的120秒之内依然保持不变
B:数据缓存:
缓存是不是整个页面,而是页面中的每些数据。通常会把从数据库查询出来的
数据量大而且访问频率高的数据放入数据缓存中,这是由Cache类来实现的
它的使用格式是:
1)放入缓存:if (Cache["key"]==null) Cache["key"]=值
2)取数据: 变量名=(类型转换)Cache["key"];
但是这一种格式的致命的弱点是缓存不会随着缓存中数据的更新而改变,数据的实时性不高
可以通过下面的代码,让缓存中的数据发生改变时,会自动通知缓存已经过期,从而重建缓存
在Page_load事件里面写上如下代码:
if (!IsPostBack)
{
Response.Write("开始取数据时间:" + DateTime.Now.ToLongTimeString()+"毫秒:"+DateTime.Now.Millisecond.ToString()+"<br>");
DataTable dt = null;
if (Cache["dt"] == null)
{
string constr=ConfigurationManager.ConnectionStrings["constr"].ConnectionString;//读取web.config配置信息
dt = dbManager.RunHasResultSql("select * from worker");
SqlCacheDependencyAdmin.EnableNotifications(constr); //为Web应用程序启用自动通知特性
SqlCacheDependencyAdmin.EnableTableForNotifications(constr, "worker");//设置数据库中表的自动通知特性
SqlCacheDependency sqldep = new SqlCacheDependency("northwind", "worker"); //创建缓存清空的依赖项为northwind中的worker表,以后只要worker表的数据的改变了缓存就会清空
Cache.Insert("dt", dt,sqldep); //插入缓存项
Response.Write("从数据库中取数据<br>");
}
else
{
dt = (DataTable)Cache["dt"];
Response.Write("从缓存中去<br>");
}
this.GridView1.DataSource = dt;
this.GridView1.DataBind();
Response.Write("结束取数据时间:" + DateTime.Now.ToLongTimeString() + "毫秒:" + DateTime.Now.Millisecond.ToString() + "<br>");
}
还要配置web.config文件如下
*********************************************************************************************
<configuration>
<appSettings/>
<connectionStrings>
<add name="constr" connectionString="server=.;database=northwind;uid=sa;pwd=" providerName="using System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<caching>
<sqlCacheDependency enabled="true" pollTime="500"> //polltime是轮询的时间,当缓存中的数据在后台改变会过多长时间通知缓存过期单位为毫秒,至少要>=500,此项一定不能少
<databases>
<add name="northwind" connectionStringName="constr"/>
</databases>
</sqlCacheDependency>
</caching>
*********************************************************************************************
Asp.net对应用程序的配置都放在Web.Config配置文件里面,通过使用
Web.Config进行配置,可以增加程序的灵活性
1:如何利用Web.Config配置数据库的连接字符串
1)在<connectionStrings>节下面配置如下:
<connectionStrings>
<add name="constr" connectionString="server=.;database=test;uid=sa;pwd=123" providerName="System.Data.SqlClient">
</add>
</connectionStrings>
2)读取配置的字符串:
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
2:当应用程序发生错误时,自动定向到一个错误页面
<customErrors mode="On" defaultRedirect="Error.aspx"/>
3:是否启用调式:
<compilation debug="true"/>
在开发时,可以启用,但是在发布时,一定要禁用
4:指定Asp.net检证模式。四种检验模式
A)Windows检证模式:
客户端每次连接Web服务器时,必须要输入Web服务器操作系统上windows
账户名,如此IIs才会认为你有权限来访问该Web服务器上的网页
(不能在本机上测试,由于本机在开机时已经登录过,也就是说已经通过的
window的身份检验)
好处:可以很好的和公司服务器的账户集成,安全
坏处:任何一个用户要浏览网页,必须要创建一个账号
结论:如果你的网站是供Internet来访问的话,不能使用此检证模式,那样
会创建很多账户
B)Forms身份验证(Internet身份检验)
客户端每次连接Web服务器的任何页面时,Web服务器会检查是否通过Forms身份验 证,如果没有通过,则自动转到用户开发的登录表单中进行身份检验。一旦用户
通过检验,则向客户端添加一个Cookies,以后通过这个Cookies来进行身份的
检验。可以达到只需要登录一次,然后永远信任的特点。以前的登录方式
只要知道了网页名,直接在网址里面输入就可以了,非常不安全。
步骤:
<authentication mode="Forms">
<forms name="myauth" loginUrl="login.aspx"></forms>
</authentication>
<authorization>
<deny users="?"></deny> [拒绝没有授权的账户]
</authorization>
在登录页面里面输入以下代码:
if (this.TextBox1.Text == "chen" && this.TextBox2.Text == "123")
{
FormsAuthentication.SetAuthCookie(this.TextBox1.Text, false); [写入Cookies,用false和true来决定是永远信任,还是仅本次登录信任]
if (FormsAuthentication.GetRedirectUrl(this.TextBox1.Text,false).EndsWith("default.aspx"))//如果是用户直接打开登录页面,此时会自动返回default.aspx
{
Response.Redirect("index.aspx"); //就跳转到首页
}
else
{
FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text, false); //就跳转到上一次出错的页面
}
}
举例:
1)在同一个页面里面放入多个链接,有商品管理,客户管理,产品管理,登录
只有当用户登录过之后才通使用商品管理,客户管理,产品管理模块,
否则无论点那个超链接都会自动到登录页面中来
2)阻止用户知道某个网页的地址,直接输入该网页而运行网站
C)其它的Passport,与None要配置其它的服务器,使用第三方软件才能够使用,很少使用。
评论