背景知识:Session和Cookie
http://blog.csdn.net/X_Craft/archive/2009/07/19/4361989.aspx
WebClient不会保存http响应报文中的SetCookie,更不会设置下一次http请求报文的Cookie,通过HTTP分析工具可以观察到这一点。也就是说两个WebClient调用之间不具有持续性。
在session方面一个典型的应用就是自动登录,在“Session和Cookie”一章中有一个Login.asp和ListData.asp,Login.asp在session中记录用户登录信息,ListData.asp中操作这个信息,而贯穿这两个页面的条件是session id和同一浏览器,服务端在Login.asp的HTTP响应报文头的SetCookie中返回session id浏览器在内存中保存session id 并在下一次对ListData.asp的请求报文中设置Cookie内容为session id,因为WebClient不具持续性,所以默认情况下利用WebClient是无法实现Login.asp自动登录后再调用ListData.asp显示出正确的用户名的。
在cookie方面,“Session和Cookie”一章中的Welcome.asp是一个典型例子,服务端在WelCome.asp响应报文头的SetCookie段中返回Cookie内容,浏览器会在磁盘上保存这个cookie,并在下一次对Welcom.asp的请求报文头中设置Cookie内容,因为WebClient不具持续性所以使用WebClient去访问这个页面,始终会返回第一次登录的信息。
无论是上述的session还是cookie应用,要使WebClient具有持续性,就需要在代码中处理SetCookie和Cookie
一种方式是直接处理WebClient的请求和响应报文头,以下是登录应用的示例代码
对于Welcome.asp的处理也是一样
另一种方式是继承WebClient,重写GetWebRuquest方法,具体代码请参考网上的相关文章。
参考资料:
WebClient类的使用中遇到的几个问题
http://bccu.cnblogs.com/archive/2006/04/29/388770.aspx
从WebBrowser中取得Cookie 和 WebClient设置cookie!
http://www.cnblogs.com/cai9911/archive/2008/03/05/1091443.html
实现支持会话的WebClient
http://www.cnblogs.com/listhome/archive/2007/11/22/968963.html
WebClient 保持 Session 和 Cookie
http://www.cnblogs.com/anjou/archive/2008/05/25/1206832.html