??xml version="1.0" encoding="utf-8" standalone="yes"?> 1、ASP.NET 会话状?/strong> ASP.NET 默认情况下将会话信息存储?ASP.NET 应用E序的内存空间。您可以使用一个独立的服务存储会话信息以便重新启动 ASP.NET 应用E序后会话信息仍然保留;或将会话信息存储?SQL Server 中以便会话信息可供网l场中的多个 Web 服务器用(重新启动 ASP.NET 应用E序后会话信息也会保留)Q或会话信息存储在自定义数据存储区。有x多信息,请参?a target="_blank">会话状态模?/a>?/p>
除了会话状态外QASP.NET q提供在应用E序中保留数据的一些其他方式。有xU方式的比较Q请参见 ASP.NET 状态管理徏?/a>?p2 通过在应用程序的 Web.config 文g中ؓ sessionState 元素?mode 属性分配一?SessionStateMode 枚D|可以指定要让 ASP.NET 会话状态用的模式。除?InProc ?Off 之外Q其他模式都需要附加参敎ͼ例如在本主题后面讨论的q接字符串倹{通过讉K System.Web.SessionState.HttpSessionState.Mode 属性的|可以查看当前选定的会话状态?p3 3、ASP.NET在不同应用程序之间共享Session *p4 Ҏ1Q?br />
每个独立的Web应用E序攑ֈl一的解x案中Q实现v来复杂,易用性不高?br />
StateServer 模式Q虽然是独立的状态服务器Q进E)Q但在内存中q些应用E序q是隔离的?/p>
SQLServer 模式Q由于对Session的全部操作都是由存储q程来实现的Q而且存储q程未进行加密,可以通过修改存储q程的内部结构来辑ֈ׃n的目的?br />
asp中Session的工作原理: 原因1Q?nbsp; 原因2Q?nbsp; 原因3Q?nbsp; 原因4Q?nbsp; 原因5Q?nbsp; 原因6Q?nbsp; 解决丢失的经?nbsp; 问:Z么Session在有些机器上偶尔会丢失? 问:Z么当调用Session.Abandon时ƈ没有Ȁ发Session_EndҎQ?nbsp; 问:Z么当我在InProc模式下用Session会经怸失? 问:Z么在Session_End中不能用Response.Redirect和Server.TransferҎ跌{面Q?nbsp; 问:在Session_End中是否可以获得HttpContext对象Q?nbsp; 问:在Web Service中该如何使用SessionQ?nbsp; 问:Session在global.asax中的那些事g中有效? 问:Sessionqx时意味着什么? 问:在global.asax中的事g处理函数中SessionZ么无效? 问:当页面出现错误后我的Session是否被保存Q我需要在Session_End中处理一些清理工作,但是p|了,Z么? 问:在Session_End是我是否可以获得有效的HttpSessionState和HttpContext对象Q?nbsp; 问:在SQLServer模式下用SessionQؓ什么我的Session不过期? 问:当我讄EnableSessionState?#8220;ReadOnly”后,但是我在InProc模式下依然可以修改Session的|q是Z么? 问:Z么在切换成SQLServer模式后我的请求被挂v了? re: 因為Session在還沒裝物g之前, ID都不是固定的. 如果您c予Session內容, ex: Session["xxx"]=123 , 您會發現ID會固定. *p8
Ҏ一Q用Request.PathInfo 参数而不是查询字W串
Ҏ二:使用HttpModule实现URL重写
Ҏ三:在IIS7中用HttpModule 实现无扩展名的URL重写
Ҏ四:在IIS5和IIS6中?ISAPIRewrite 来实现无扩展名的URL重写
在URL重写里处理ASP.NET PostBack
正确地处理CSS和图像引?/a>
例程的URL重写场景
http://www.store.com/products.aspx?category=books
http://www.store.com/products.aspx?category=DVDs
http://www.store.com/products.aspx?category=CDs
Ҏ一Q用Request.PathInfo 参数而不是查询字W串
http://www.store.com/products.aspx/Books
http://www.store.com/products.aspx/DVDs
http://www.store.com/products.aspx/CDs
Ҏ二:使用HttpModule实现URL重写
http://www.store.com/products/Books.aspx
http://www.store.com/products/DVDs.aspx
http://www.store.com/products/CDs.aspx
Ҏ三:在IIS7中用HttpModule 实现无扩展名的URL重写
http://www.store.com/products/Books
http://www.store.com/products/DVDs
http://www.store.com/products/CDs
IIS 7.0使得处理q类情ŞҎ之极。你现在可以?IIS h道的Q何地Ҏ行一个HttpModuleQ这意味着你可以用上面的URLRewriter 模块来处理和重写无扩展名的URL(甚至是带?.aspQ?phpQ或 .jsp 扩展名的URL)。下面示范了你在IIS7中该如何配置Q?
<configuration>
<configSections>
<section name="rewriter"
requirePermission="false"
type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
</configSections>
<system.web>
<httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" />
</httpModules>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule" />
</modules>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
<rewriter>
<rewrite url="~/products/(.+)" to="~/products.aspx?category=$1" />
</rewriter>
</configuration>
Ҏ四:在IIS5和IIS6中?ISAPIRewrite 来实现无扩展名的URL重写
在URL重写里处理ASP.NET PostBack
当用URL重写Ӟ会出现这L问题Q?lt;form> 控g昄的URL不是原先h的URL(譬如Q?products/books)Q而是重写q后的URL(譬如Q?products.aspx?category=books)。这意味着Q当你做一个postback到服务器ӞURL不再是你原先q净利落的那个了? 在ASP.NET 2.0中,有个比较q净的诀H你可以用来重写<form>控g的action属性。具体地来说Q你可利用新的ASP.NET 2.0控g适配器扩展架构来定制控g的输出,用你提供的值来覆盖action属性的倹{这不要求在你的.aspx面里做M~码改动Q而只要在你的/app_browsers文g多wd一?browser文gQ注册用一个控仉配cd可输出新的action属性?br />
正确地处理CSS和图像引?br />
不少人在W一ơ用URL重写Ӟ有时会遇上一个疑难杂症,是他们发现他们的图像和CSS样式表引用有时会停止工作。这是因Z们在HTML|页里有对这些文件的相对引用Q当你开始在应用里重写URLӞ你需要意识到览器经怼在不同的逻辑层次l构层上(logical hierarchy levels)h文gQ而不是实际存储在服务器上的东ѝ?
譬如Q如果我们上面的/products.aspx|页?aspx |页里的logo.jpg有一个相对引用,但是通过 /products/books.aspxq个URL来请求的Q那么浏览器在显C网|Q将会发Z个对/products/logo.jpg的请求,而不是对/logo.jpg的请求。要正确地引用这个文Ӟ认你用根目录限定了(root qualify)CSS和图像引?“/style.css”Q而不?“style.css”)。对于ASP.NET控gQ你也可以?#8220;~”句法从你应用的根目录来引用文?譬如Q?lt;asp:image imageurl="~/images/logo.jpg" runat="server"/>) ?
附:/Files/kiant/2010.05/UrlRewrite_HttpModule1.FormRewriter.cs.zip 附加CS版的文g
]]>
3、ASP.NET在不同应用程序之间共享Session
4、Session无故丢失
5、客L使用Cookieless的方式存储Session信息
6、Session.SessionID 固定
会话状态可在以下情况下使用Q存储特定于单独会话的短期信息,q且需要较高的安全性。不要在会话状态中存储大量的信息。需要注意,ؓ应用E序中每一会话的生存期创徏q维护会话状态对象。在支持许多用户的应用程序中Q这可能会占用大量服务器资源q媄响可~放性?p1
?
*p1QASP.NET 状态管理徏?nbsp;http://msdn.microsoft.com/zh-cn/library/z1hkazw7(v=VS.80).aspx
*p2QASP.NET 会话状?nbsp;http://msdn.microsoft.com/zh-cn/library/87069683(v=VS.80).aspx
2、会话状态模?br />
ASP.NET 会话状态支持若q用于会话数据的存储选项。每个选项都由 SessionStateMode 枚D中的一个值标识。下面的列表描述了可用的会话状态模式:
注:
*p3Q会话状态模?nbsp;http://msdn.microsoft.com/zh-cn/library/ms178586(v=VS.80).aspx
多个单独的应用程序,如何这些模块集中n份验证与授权q程
Ҏ2Q利用Session会话׃n
InProc模式QSession被存储在IISq程中,每个虚拟目录是隔ȝQ所以无法共享Session?/p>
ASPState数据库ASPStateTempApplications表中存储的是应用E序信息Q每个应用程序在启动的时候在q里会注册一条记录,包括应用E序的IDQ通过哈希法生成的)和应用程序名U。有多少个应用程序,在这个表里就对应多少条记录。那我们现在要做的是把这些记录变成一条记录,也就是要ƺ骗FrameworkQ让它认些不同的应用E序是同一个应用程序?br />
TempGetAppID存储q程Q这个存储过E是用于通过传递应用程序名U来得到应用E序ID信息的。每个应用程序在调用q个q程Ӟq个q程会去AspStateTempApplications中检查是否有相应的记录,如果没有Q就插入记录Q然后返回相应的ID?br />
@appName tAppName,
@appId int OUTPUT
AS
SET @appName = LOWER(@appName)
--变量值固定,使所有应用程序通用Z?/span>
SET @appName = '/lm/w3svc/650056020/root/personnel/share'
SET @appId = NULL
SELECT @appId = AppId
FROM [tempdb].dbo.ASPStateTempApplications
WHERE AppName = @appName
注:
*p4QASP.NET在不同应用程序之间共享Session http://www.3qsoft.com/Article.aspx?ID=173
4、Session无故丢失 *p5
mode="InProc"
==
默认的配|方式很Ҏ丢失Session 请参?nbsp;
asp的Session是具有进E依赖性的。ASP Session状态存于IIS的进E中Q也是inetinfo.exeq个E序。所以当inetinfo.exeq程崩溃Ӟq些信息也就丢失。另外,重v或者关闭IIS服务都会造成信息的丢失?nbsp;
bin目录中的文g被改写,asp.net有一U机ӞZ保证dll重新~译之后Q系l正常运行,它会重新启动一ơ网站进E,q时׃DSession丢失Q所以如果有access数据库位于bin目录Q或者有其他文g被系l改写,׃DSession丢失
文g多w项中,如果没有打开“在单独的q程中打开文g夹窗?#8221;Q一旦新Z个窗口,pȝ可能认ؓ是新的Session会话Q而无法访问原来的SessionQ所以需要打开该选项Q否则会DSession丢失
g大部分的Session丢失是客L引v的,所以要从客L下手Q看看cookie有没有打开
Session的时间设|是不是有问题,会不会因旉成丢失
IE中的cookie数量限制Q每个域20个cookieQ可能导致session丢失
使用web garden模式Q且使用了InProc mode作ؓ保存session的方?nbsp;
1. 判断是不是原?造成的,可以在每ơ刷新页面的时候,跟踪bin中某个文件的修改旉
2. 做Sessiond日志Q每ơ读写Session都要记录下来Qƈ且要记录SessionID、Session倹{所在页面、当前函数、函C的第几次Session操作Q这h丢失的原因会方便很多
3. 如果允许的话Q徏议用state server或sql server保存sessionQ这样不Ҏ丢失
4. 在global.asa中加入代码记录Session的创建时间和l束旉Q超旉成的Session丢失是可以在SessionEnd中记录下来的?nbsp;
5. 如果有些代码中用客L脚本Q如javascriptl护Session状态,p试调试脚本Q是不是因ؓ脚本错误引vSession丢失
{:可能和机器的环境有关p,比如Q防火墙或者杀毒Y件等Q尝试关闭防火墙?nbsp;
{:首先Session_EndҎ只支持InProcQ进E内的)cd的Session。其ơ要Ȁ发Session_EndҎQ必d在SessionQ即pȝ中已l用Session了)Qƈ且至要完成一ơ请求(在这ơ请求中会调用该ҎQ?nbsp;
{:该问题通常是由于应用程序被回收D的,因ؓ当用进E内SessionӞSession是保存在aspnet_wpq程中,当该q程被回收Session自然也就没有了,定该进E是否被回收可以通过查看pȝ的事件查看器获得信息?nbsp;
具体信息请参考:
Session variables are lost intermittently in ASP.NET applications
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q316148
?.0的时候也有一个bug会导致工作进E被回收q启,该bug已经?.1和sp2中修复?nbsp;
关于该bug的详l信息请参考:
ASP.NET Worker Process (Aspnet_wp.exe) Is Recycled Unexpectedly.
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q321792
问:什么类型的对象可以保存在Session里?
{:q依赖用的Session的模式,当用的是进E内QInProcQ的Session那么可以L的保存Q何对象。如果你使用了非InProc的模式,则只能保存可以序列化和反序列化的对象Q如果此时保存的对象不支持序列化Q则不能保存到这U模式(非InProcQ的Session里?nbsp;
{:Session_End是一个在服务器内部激发的事g处理函数。它是基于一个服务器内部的计时器的,在激发该事g时服务器上ƈ没有相关的HttpRequest对象Q因此此时ƈ不能使用Response.Redirect和Server.TransferҎ?nbsp;
{:不行Q因个事件ƈ没有和Q何的hQRequestQ相兌Q没有基于请求的上下文?nbsp;
{:Z在Web Service中用SessionQ需要在Web Service的调用方做一些额外的工作Q必M存和存储调用Web Service时用的Cookie。详l信息请参考MSDN文档的HttpWebClientProtocol.CookieContainer属性。然而,如果你用代理服务器讉KWeb Service׃框架的限Ӟ两者不能共享Session?nbsp;
问:当我使用webfarmӞ当我重定向到其他的Web服务器时SessionZ么会丢失Q?nbsp;
{:详细信息请参考:
PRB: Session State Is Lost in Web Farm If You Use SqlServer or StateServer Session Mode
http://support.microsoft.com/default.aspx?scid=kb;en-us;325056
{:Session只有在AcquireRequestState事g之后有效Q该事g之后的事仉可以使用Session?nbsp;
问:Z可以序讉KSession的状态|Session是否提供了锁定机Ӟ
{:Session实现了Reader/Writer的锁机制Q?nbsp;
当页面对Sessionh可写功能Q即面?<%@ Page EnableSessionState="True" %>标记Q,此时直到h完成该页面的Session持有一个写锁定?nbsp;
当页面对Sessionh只读功能Q即面?<%@ Page EnableSessionState="ReadOnly" %>标记Q,此时知道h完成该页面的Session持有一个读锁定?nbsp;
读锁定将d一个写锁定Q读锁定不会d读锁定;写锁定将d所有的d锁定。这是Z么两个框架中的同一个页面都d同一个SessionӞ其中一个要{待另一个(E快的那个)完成后,才开始写?nbsp;
{:Sessionqx时意味着只要你的面讉KQ用)了SessionQ超时时间将被刷斎ͼ可以理解为重新计ӞQ即从该面h开始,重新计超时时间。但是,该页面不能禁用Session。它会自动的讉K当前面的SessionQ刷新超时时间?nbsp;
{:依赖于在哪个事g处理函数中用SessionQSession在AcquireRequestState事g之后才有效,该事件之后的所有事件处理函数都可以使用SessionQ之前的则不能?nbsp;
问:当我使用InProc模式保存SessionӞ此时的Session是保存在哪里Q?nbsp;
{:不同的IIS的处理方式不同,
当用的是IIS5的时候Session是保存在aspnet_wp.exe的进E空间里的?nbsp;
当用的是IIS6Ӟ默认情况下所有的应用E序׃n应用E序池,Session保存在w3wp.exe的进E空间中?nbsp;
{:Session_End只有在Sessionq行在InProc模式下才会被执行。Session_End使用的帐hq行aspnet_wp工作q程的帐Pq个可以在machine.config中设|)。因此,如果在Session_EndҎ里,使用集成安全性链接到SQLQ它用aspnet_wpq程的帐h开链接Q此时成功与否则依赖于你的SQL的安全性设|?nbsp;
{:你可以在q个Ҏ中获得HttpSessionState对象Q可以直接用Session来访问即可。但是不能获得HttpContext对象Q因事gq没有和Mh相关联,因此不存在上下文对象?nbsp;
{:在SqlServer模式下,Session的过期是通过SQL Agent的注册工作完成的Q请查你的SQL Agent是否q行Q?nbsp;
{:即EnableSessionState标示为ReadOnlyQ但是在InProc模式下用户依然可以编辑Session。唯一不同的是Q在hq程中Session不会被锁住?nbsp;
{:查在Session里面是否都保存的是可以保存在SQLServer模式下的对象Q即q些对象必须支持序列化?nbsp;
问:当Session讄成cookieless后会有什么媄响?
{:当把cookieless讄成trueӞ主要会有下面的约束:
1、在面中不能用绝寚w?nbsp;
2、在应用E序中在除了Http和Https之间的切换时需要完成一些其他的步骤?nbsp;
如果发送一个链接给其他人,此时的URL里面包含Session ID的信息,所以两个h公用一个Session?nbsp;
注:
*p5QSession丢失 http://topic.csdn.net/u/20081208/14/c154543c-8e86-406b-82a2-d3cc6f736b0d.html
5、客L使用Cookieless的方式存储Session信息
sessionState中的cookieless="false"改ؓQcookieless="true"Q这P客户端的Session信息׃再用Cookie存储了,而是其通过URL存储。关闭当前的IEQ打开一个新IEQ重新访问刚才的Web应用E序Q浏览器地址׃变ؓ http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245)/default.aspx中黑体标出的是客户端的Session ID。注意,q段信息是由IIS自动加上的,不会影响以前正常的连接?*p6
问:当Session讄成cookieless后会有什么媄响?
{:当把cookieless讄成trueӞ主要会有下面的约束:
1、在面中不能用绝寚w?nbsp;
2、在应用E序中在除了Http和Https之间的切换时需要完成一些其他的步骤?nbsp;
如果发送一个链接给其他人,此时的URL里面包含Session ID的信息,所以两个h公用一个Session?*p7
注:
*p6Q[ASP.NET] Session 详解 http://www.blueidea.com/tech/program/2004/1856.asp
*p7QSession丢失 http://topic.csdn.net/u/20081208/14/c154543c-8e86-406b-82a2-d3cc6f736b0d.html
注:
*p8Q[ASP.Net]Session.IsNewSession與Session.SessionID http://www.dotblogs.com.tw/yilinliu/archive/2009/04/24/8163.aspx
]]>
引用自:
asp.net获取|站路径
http://hi.baidu.com/zhangfengbang/blog/item/5f99d74b0ce661f883025cbc.html
HttpRequest 成员
http://msdn.microsoft.com/zh-cn/library/system.web.httprequest_members(v=VS.80).aspx
ASP.NET获取|站根目录的url的函敎ͼ很简?br />
http://www.xueit.com/html/2009-03/21_932_00.html
M于Request/HttpContext.Current{相关的Ҏ, 都只能在有请求上下文或者页面时使用. 卛_无请求上下文?HttpContext.Current为null. 而上面提到的Ҏ一直可?
对于全局Cache对象的访问亦?
数据库中Imagecd的数据的存取(For C#/ASP.NET)
http://www.cnblogs.com/billsfeng/archive/2008/07/31/1257579.html
SQL Server存储囑փ数据的策略与Ҏ
http://www.yesky.com/20030113/1648152.shtml
How To Read and Write BLOB Data by Using ADO.NET with Visual C# .NET
http://support.microsoft.com/default.aspx?scid=kb;EN-US;309158
<%# Bind("Subject") %> //l定字段
<%# Container.DataItemIndex + 1%> //实现自动~号
<%# DataBinder.Eval(Container.DataItem, "[n]") %>
通常使用的方?br />
<%# DataBinder.Eval(Container.DataItem, "ColumnName") %>
<%# DataBinder.Eval(Container.DataItem, "ColumnName", null) %>
<%# DataBinder.Eval(Container, "DataItem.ColumnName", null) %>
其他用法
<%# ((DataRowView)Container.DataItem)["ColumnName"] %>
<%# ((DataRowView)Container.DataItem).Row["ColumnName"] %>
<%# ((DataRowView)Container.DataItem)["adtitle"] %>
<%# ((DataRowView)Container.DataItem)[n] %>
<%# ((DbDataRecord)Container.DataItem)[0] %>
<%# (((自定义类?Container.DataItem)).属?ToString() %>//如果属性ؓ字符串类型就不用ToString()?/p>
DataBinder.Eval用法范例
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
格式化字W串参数是可选的。如果忽略参敎ͼDataBinder.Eval q回对象cd的|
//昄二位数
<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>
//{0:G}代表昄True或False
<ItemTemplate>
<asp:Image Width="12" Height="12" Border="0" runat="server"
AlternateText='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "{0:G}") %>'
ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "~/images/{0:G}.gif") %>' />
</ItemTemplate>
//转换cd
((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring(4,4)
{0:d} 日期只显C年月日
{0:yyyy-mm-dd} 按格式显C年月日
{0:c} 货币样式
<%#Container.DataItem("price","{0:K?,##0.00}")%>
<%# DataBinder.Eval(Container.DataItem,"Company_Ureg_Date","{0:yyyy-M-d}")%>
Specifier Type Format Output (Passed Double 1.42) Output (Passed Int -12400)
c Currency {0:c} $1.42 -$12,400
d Decimal {0:d} System.FormatException -12400
e Scientific {0:e} 1.420000e+000 -1.240000e+004
f Fixed point {0:f} 1.42 -12400.00
g General {0:g} 1.42 -12400
n Number with commas for thousands {0:n} 1.42 -12,400
r Round trippable {0:r} 1.42 System.FormatException
x Hexadecimal {0:x4} System.FormatException cf90
{0:d} 日期只显C年月日
{0:yyyy-mm-dd} 按格式显C年月日
样式取决?Web.config 中的讄
{0:c} ?{0:K?,000.00} 货币样式 标准英国货币样式
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US" />
</system.web>
昄?K?,000.10
{0:c} ?string.Format("{0:C}", price); 中国货币样式
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-cn" uiCulture="zh-cn" />
</system.web>
昄?K?,000.10
{0:c} ?string.Format("{0:C}", price); 国货币样式
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
昄?$3,000.10
DataBinder.Eval(Container.DataItem,"Name")和Container.DataItem("Name")有什么区别?
DataBinder是System.Web里面的一个静态类Q它提供?span style="color: #0000ff">EvalҎ用于化数据绑定表辑ּ的编?/span>Q但是它使用的方式是通过Reflection{开销比较大的Ҏ来达到易用性,因此其性能q不是最好的。而Container则根本不是Q何一个静态的对象或方法,它是ASP.NET面~译器在数据l定事g处理E序内部声明的局部变量,其类型是可以q行数据l定的控件的数据容器cdQ如在Repeater内部的数据绑定容器叫RepeaterItemQ,在这些容器类中基本都有DataItem属性,因此你可以写Container.DataItemQ这个属性返回的是你正在被绑定的数据源中的那个数据项。如果你的数据源是DataTableQ则q个数据的cd实际是DataRowView?br />
1、Response.Redirect():
Response.RedirectҎD览器链接到一个指定的URL。当Response.Redirect()Ҏ被调用时Q它会创Z个应{,应答头中指出了状态代?02Q表C目标已l改变)以及新的目标URL。浏览器从服务器收到该应{,利用应答头中的信息发Z个对新URL的请求?br />
q就是说Q用Response.RedirectҎ旉定向操作发生在客LQ?span style="color: #0000ff">d涉及Cơ与服务器的通信Q两个来回)Q?/span>W一ơ是对原始页面的hQ得C?02应答Q第二次是请?02应答中声明的新页面,得到重定向之后的面?br />
2、Server.Transfer
Server.transfer是IIS 5.0新增加的一个功能。它解决了Response.Redirect的两个重要的~陷Q?br />
1Q在Response.Redirect中,我们得不CQ何第一늚输出
2QResponse.Redirect会丢失request中的所有属性,当然我们可以通过一些其他的办法Q比如session来搞定,可是Q有些页的参数是在request中传q来的,q样的话Q就不行?br />
3) Response.Redirect需要client端再发v一个请求?br />
Server.transfer很好地解决了这些问题。它是从server端直接向下一发赯求,不需要client再次发送请求。如果你的网非怾赖response.redirectQ这个小的改变可以提高近25%的效率(Ҏ微Y文档Q?/p>
Server.TransferҎ把执行流E从当前的ASPX文g转到同一服务器上的另一个ASPX面。调用Server.TransferӞ当前的ASPX面l止执行Q执行流E{入另一个ASPX面Q但新的ASPX面仍用前一ASPX面创徏的应{流?br />
Server.Transfer()有一?span style="color: #ff0000">不是Q?/span>当用户在a.aspx中提交了一个表?然后用Server.Transfer()q入 b.aspxQ这时如果用户刷C下页面,览器便会问用户是否“重试”发送表单,如果用户点击“?#8221;Q那么,表单中的数据被重新发送到服务器。如发送表单的作用是Z向数据库中插入一条记录,l果g希望发生的事——同一表单被多ơ加入到数据库中?/p>
4.
如果用Server.TransferҎ实现面之间的导航,览器中的URL不会改变Q因为重定向完全在服务器端进行,览器根本不知道服务器已l执行了一ơ页面变换?br />
默认情况下,Server.TransferҎ不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的W二个参数设|成TrueQ就可以保留W一个页面的表单数据和查询字W串?br />
同时Q用Server.Transfer时应注意一?/span>Q目标页面将使用原始面创徏的应{流Q这DASP.NET的机器验证检查(Machine Authentication CheckQMACQ认为新面的ViewState已被改。因此,如果要保留原始页面的表单数据和查询字W串集合Q必L目标面Page指o?EnableViewStateMac属性设|成False?/p>
3、Server.Execute
Server.ExecuteҎ允许当前的ASPX面执行一个同一Web服务器上的指定ASPX面Q当指定的ASPX面执行完毕Q控制流E重新返回原面发出Server.Execute调用的位|。这U页面导航方式类g针对ASPX面的一ơ函数调用,被调用的面能够讉K发出调用面的表单数据和查询字符串集?/span>Q所以要把被调用面Page指o的EnableViewStateMac属性设|成False?br />
Server.Execute("another.aspx")和Server.Transfer("another.aspx")区别:
Execute是从当前面转移到指定页?q将执行q回到当前页?nbsp;
Transfer是将执行完全转移到指定页?
ȝQ?br />
在网l状态较好的情况?Redirect(url)Ҏ效率最?! 可重定向到同一台或非同一台服务器上的aspx或非aspxQhtmlQ资?nbsp; *重定?br />
Server.TransferҎ和Server.ExecuteҎ最灉|!! 但只能{到同一Application目录下,也有可能D不期望的l果发生 *转发
Server.ExecuteҎ占用资源最? *包含
ps. *ؓW记
]]>
1.
Enterprise Library启用{后发?PublicKeyToken错误QHRESULT:0x80131040解决
http://blog.csdn.net/cnming/archive/2007/07/15/1691714.aspx
ps:我的解决Ҏ PublicKeyToken=null, 不设|秘?/p>
2.Ҏ据库操作
http://pw.cnblogs.com/archive/2006/06/02/415431.html
3.
Microsoft.Practices.ObjectBuilder2.BuildFailedException: The current build operation (build key Build Key[Microsoft.Practices.EnterpriseLibrary.Data.Database, HRPConnection]) failed: 找不到请求的 .Net Framework 数据提供E序。可能没有安装?(Strategy type ConfiguredObjectStrategy, index 2) ---> System.ArgumentException: 找不到请求的 .Net Framework 数据提供E序。可能没有安装?/p>
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null" />
改ؓ(参见: x:\EntLib41Src\Quick Starts\Data\CS\DataAccessQuickStart\app.config CZ)
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data" />
=======================================================
或者说最大的可能是没有相应的数据库链接驱?br />
比如: 我的目中用的?mysql 配置文g?providerName="System.Data.SqlClient"
如果没有装相应的驱动 mysql-connector-net-6.0.3.zip有可能报这个错?
4. 数据库连?"未将对象引用到实? ?/strong>
在家里机器上 "数据q接--MySQL Database--Server Name" 一栏填上本?IP地址 "10.0.0.99" 会提C错误信?"未将对象引用到实?, 改ؓ "localhost" 可? 但是在公司机器上却没q个问题.
(N是因为公怸机有提供 mysql服务, 所以直接连接主成功.
而个人家里面用的是精? 没安装服? 所以直接打 IP地址是连接不? 需改ؓ localhost)
5. 步骤
使用microsoft EnterpriseLibraryq接不同数据库简单应?
文章出处Qhttp://www.diybl.com/course/4_webprogram/asp.net/netjs/20081216/154074.html
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("root");
XmlElement companyId = doc.CreateElement("companyId");
companyId.InnerText = "1";
root.AppendChild(companyId);
doc.AppendChild(root);
string kk = doc.OuterXml;
///////////////////////////
try
{
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("root");
foreach (var item in dict)
{
XmlElement e = doc.CreateElement(item.Key);
e.InnerText = item.Value;
root.AppendChild(e);
}
doc.AppendChild(root);
return doc.OuterXml;
}
catch (Exception)
{
return "";
}
string kk = doc.ToString();
---------
XDocument doc = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
XElement root = new XElement("root");
XElement element = new XElement("companyId");
element.Value = 1 + "";
root.Add(element);
doc.Add(root);
q时候请查数据库服务器上 MySql.Data.dll 文g版本和项?bin 目录下的版本是否一致?/p>
如果q程L版本?6.0.3
而项目引用的?5.0.3
则会出现以上的错误提C?/p>
但是如果本机L上版本是 6.0.3
即ə目引用的是 5.0.3
也能正常q接数据库,不清楚是什么原?/p>