<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>开心编程网 &#187; .NET</title>
	<atom:link href="http://www.kaixinbc.com/category/net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kaixinbc.com</link>
	<description>是一个专注于java、.net、asp、jsp、php、C语言、C++语言、Delphi、go语言、MySQL、sql server、linux、oracle、及Web 2.0等的原创IT编程网站，为国内众多的编程爱好者提供一个“平等自由协作创造”的开放式交流环境，提供编程专题文章、编程论坛、资源下载、博客和开源项目等栏目,作者方志凯（fangzhikai）。</description>
	<lastBuildDate>Thu, 15 Jul 2010 01:32:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ASP.NET中防止页面多次提交的代码实现</title>
		<link>http://www.kaixinbc.com/2010/03/asp-net-disable.html</link>
		<comments>http://www.kaixinbc.com/2010/03/asp-net-disable.html#comments</comments>
		<pubDate>Sat, 13 Mar 2010 03:39:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.kaixinbc.com/?p=472</guid>
		<description><![CDATA[此处提供的代码用来实现当asp.net页面中的某个Button被点击后disable掉该页面中所有的Button，从而防止提交延时导致 的多次提交。基于之前的onceclickbutton脚本.
//ASP.NET中防止页面多次提交的代码:javascript&#60; script  language=&#8221;javascript&#8221;&#62; &#60;  !&#8211; function disableOtherSubmit() {
var obj = event.srcElement;
var objs = document.getElementsByTagName(&#8216;INPUT&#8217;);
for(var i=0; i&#60; objs.length; i++)
{
if(objs[i].type.toLowerCase() == &#8217;submit&#8217;)
{
objs[i].disabled = true;
}
}
} //&#8211;&#62; &#60; /script&#62;//ASP.NET中防止页面多次提交的代码:asp.netpublic  class  PreventMultiClick : System.Web.UI.Page {
protected System.Web.UI.WebControls.Button Button1; protected   System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.LinkButton LinkButton1;  protected  System.Web.UI.WebControls.Button Button3; private void  Page_Load(object sender,  [...]]]></description>
			<content:encoded><![CDATA[<p>此处提供的代码用来实现当asp.net页面中的某个Button被点击后disable掉该页面中所有的Button，从而防止提交延时导致 的多次提交。基于之前的onceclickbutton脚本.</p>
<p>//ASP.NET中防止页面多次提交的代码:javascript&lt; script  language=&#8221;javascript&#8221;&gt; &lt;  !&#8211; function disableOtherSubmit() {</p>
<p>var obj = event.srcElement;</p>
<p>var objs = document.getElementsByTagName(&#8216;INPUT&#8217;);</p>
<p>for(var i=0; i&lt; objs.length; i++)</p>
<p>{</p>
<p>if(objs[i].type.toLowerCase() == &#8217;submit&#8217;)</p>
<p>{</p>
<p>objs[i].disabled = true;</p>
<p>}</p>
<p>}</p>
<p>} //&#8211;&gt; &lt; /script&gt;//ASP.NET中防止页面多次提交的代码:asp.netpublic  class  PreventMultiClick : System.Web.UI.Page {</p>
<p>protected System.Web.UI.WebControls.Button Button1; protected   System.Web.UI.WebControls.Button Button2;</p>
<p>protected System.Web.UI.WebControls.LinkButton LinkButton1;  protected  System.Web.UI.WebControls.Button Button3; private void  Page_Load(object sender,  System.EventArgs e)</p>
<p>{</p>
<p>this.GetPostBackEventReference(this.Button3);</p>
<p>//保证 __doPostBack(eventTarget, eventArgument) 正确注册 if(!IsPostBack)</p>
<p>{</p>
<p>System.Text.StringBuilder sb = new System.Text.StringBuilder();</p>
<p>sb.Append(&#8220;if (typeof(Page_ClientValidate) == &#8216;function&#8217;)</p>
<p>{</p>
<p>if (Page_ClientValidate() == false)</p>
<p>{</p>
<p>return false;</p>
<p>}</p>
<p>}&#8221;); //保证验证函数的执行 sb.Append(&#8220;if(window.confirm(&#8216;are you  sure?&#8217;)==false)  return false; &#8220;);</p>
<p>//自定义客户端脚本 sb.Append(&#8220;disableOtherSubmit(); &#8220;);</p>
<p>// disable所有submit按钮   sb.Append(this.GetPostBackEventReference(this.Button3));</p>
<p>//用__doPostBack来提交，保证按钮的服务器端click事件执行 sb.Append(&#8220;; &#8220;);</p>
<p>Button3.Attributes.Add(&#8220;onclick&#8221;,sb.ToString());</p>
<p>}</p>
<p>} #region Web Form Designer generated code override protected void   OnInit(EventArgs e)</p>
<p>{</p>
<p>// // CODEGEN: This call is required by the ASP.NET Web Form  Designer. //  InitializeComponent();</p>
<p>base.OnInit(e);</p>
<p>}</p>
<p>/// &lt; summary&gt; /// Required method for Designer support &#8211; do  not  modify /// the contents of this method with the code editor. ///  &lt;  /summary&gt; private void InitializeComponent()</p>
<p>{</p>
<p>this.Button3.Click += new System.EventHandler(this.Button3_Click);   this.Load += new System.EventHandler(this.Page_Load);</p>
<p>}</p>
<p>#endregion private void Button3_Click(object sender,  System.EventArgs  e)</p>
<p>{</p>
<p>System.Threading.Thread.Sleep(3000);</p>
<p>Response.Write(&#8220;Hello world!&#8221;);</p>
<p>}</p>
<p>} 此处只是disable掉所有的submit button, 我觉得其它的可提交控件也是可以通过类似的方法来disable的.</p>
<p>以上就是ASP.NET中防止页面多次提交的代码实现。</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.kaixinbc.com%2F2010%2F03%2Fasp-net-disable.html&title=ASP.NET%E4%B8%AD%E9%98%B2%E6%AD%A2%E9%A1%B5%E9%9D%A2%E5%A4%9A%E6%AC%A1%E6%8F%90%E4%BA%A4%E7%9A%84%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kaixinbc.com/2010/03/asp-net-disable.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET 4各项技术的应用前景</title>
		<link>http://www.kaixinbc.com/2010/03/net-4.html</link>
		<comments>http://www.kaixinbc.com/2010/03/net-4.html#comments</comments>
		<pubDate>Thu, 04 Mar 2010 12:11:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.kaixinbc.com/?p=446</guid>
		<description><![CDATA[Visual Studio 2010和.NET 4的发布，显然将成为今年微软开发技术领域最值得关注的大事之一。那么，微软的最新开发技术前景如何呢？
近日金旭亮老师在CSDN博客中发表了一篇《抛砖引玉：我看微软.NET各子技术领域之应用前景》，对.NET领域内各项技术，包括Windows Form和WPF、数据存取技术、Web开发技术、云计算等应用前景发表了自己的看法。
原文中提到：




桌面应用程序开发技术（ Windows Form和WPF）：Windows Form的问题是千人一面，.NET 4中，WPF在性能上有较大的改进，这点在使用WPF开发的Visual Studio 2010上体现极为明显。我认为，WPF取代Windows Form是必然的。
数据存取技术：在实际开发中还是使用ADO.NET实体框架更合适。LINQ to SQL有的功能它都有，而且用起来更为灵活，难得的是它的使用并不比LINQ to SQL复杂多少。ADO.NET实体框架还延伸到了其它的技术领域，是一项重要的基础数据存取技术。因此， ADO.NET实体框架 vs LINQ to SQL，前者胜出。
Web开发技术：在现有.NET Web开发技术应用现状之下，任何一个与现有的ASP.NET网站（以Web Form+AJAX为主体技术）集成麻烦的技术，都很难有美好的前途。Silverlight实际上是另一种Web应用架构的代表技术，其立足点在于充分利用客户端的计算资源，可以大大地降低对服务端的依赖，而且易于构造良好的用户体验，我个人认为其发展大有可观。是一个需要重点关注的技术。
插件技术：MEF推出，MAF（Managed Add-in Framework ）会无疾而终。
WCF和.NET Remoting：有了WCF，我还要Remoting干什么？因为前者包容后者的所有功能，而且还提供了更多。我们可以看到WCF向其它领域的渗透，比如前面的WCF Data Service，还有Workflow Service（将工作流发布为WCF服务），看来微软是将宝押在WCF上了，凡是带有服务字样的，微软都有把它改造为WCF服务的冲动。
工作流：这个技术，我看是微软自己把事弄砸了。新版本和老版本差别太大。
函数式编程语言F#：我个人觉得，F#如果用于开发多线程并行计算程序，会有较高的开发效率，而函数式编程的特点，也会使它在科学计算中有较好的表现。但用于开发CRUD之类的MIS系统，至少目前还是免谈吧。
云计算：虽然我个人认可云计算是一个大的发展方向，但对于中国，这个技术是一道远方的亮丽风景，仅供观赏。因为国内还没有一个成熟的云计算平台，而微软的Azure目前又没有开放中国大陆的云计算购买服务，加上中国又有特殊的国情，所以一切都只是空中楼阁。云计算真正应用于国内，诸位请继续等待吧。了解Azure的最佳方法是看DAVID CHAPPELL的文章《Introducing Windows Azure》。
而CSDN网友阿彤则在自己的博客中对微软的技术发展路线提出了很多批评，他认为.NET设计思路很乱，是一个失败的产品，一个失败的平台。.NET可以快速做一些临时性的应用，可以快速做一些小应用。但要是去做一些大型的应用，前期很爽，后期就会痛苦不堪。永远都别指望能用.NET去开发出极致化的产品。
你的看法呢？欢迎讨论。
【特别提示】
CSDN从微软公司得到的确认，.NET框架新版本的正式名称中，版本号应该是4而不是4.0，因此我们应该说.NET 4和ASP.NET 4。请大家在交流中、撰写文章和图书时注意保持一致。
]]></description>
			<content:encoded><![CDATA[<p>Visual Studio 2010和.NET 4的发布，显然将成为今年微软开发技术领域最值得关注的大事之一。那么，微软的最新开发技术前景如何呢？</p>
<p>近日金旭亮老师在CSDN博客中发表了一篇《抛砖引玉：我看微软.NET各子技术领域之应用前景》，对.NET领域内各项技术，包括Windows Form和WPF、数据存取技术、Web开发技术、云计算等应用前景发表了自己的看法。</p>
<p>原文中提到：<br />
<script type="text/javascript"><!--
google_ad_client = "pub-6590413867458515";
/* adsense5 for kaixinbc wenzhang */
google_ad_slot = "9737719358";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
<strong>桌面应用程序开发技术（ Windows Form和WPF）</strong>：Windows Form的问题是千人一面，.NET 4中，WPF在性能上有较大的改进，这点在使用WPF开发的Visual Studio 2010上体现极为明显。我认为，<strong>WPF取代Windows Form是必然的。</strong></p>
<p><strong>数据存取技术</strong>：在实际开发中还是使用ADO.NET实体框架更合适。LINQ to SQL有的功能它都有，而且用起来更为灵活，难得的是它的使用并不比LINQ to SQL复杂多少。ADO.NET实体框架还延伸到了其它的技术领域，是一项重要的基础数据存取技术。因此， <strong>ADO.NET实体框架 vs LINQ to SQL，前者胜出。</strong></p>
<p><strong>Web开发技术</strong>：在现有.NET Web开发技术应用现状之下，任何一个与现有的ASP.NET网站（以Web Form+AJAX为主体技术）集成麻烦的技术，都很难有美好的前途。Silverlight实际上是另一种Web应用架构的代表技术，其立足点在于充分利用客户端的计算资源，可以大大地降低对服务端的依赖，而且易于构造良好的用户体验，我个人认为其发展大有可观。是一个需要重点关注的技术。</p>
<p><strong>插件技术</strong>：MEF推出，MAF（Managed Add-in Framework ）会无疾而终。</p>
<p><strong>WCF和.NET Remoting</strong>：有了WCF，我还要Remoting干什么？因为前者包容后者的所有功能，而且还提供了更多。我们可以看到WCF向其它领域的渗透，比如前面的WCF Data Service，还有Workflow Service（将工作流发布为WCF服务），看来微软是将宝押在WCF上了，<strong>凡是带有服务字样的，微软都有把它改造为WCF服务的冲动。</strong></p>
<p><strong>工作流</strong>：这个技术，我看是微软自己把事弄砸了。新版本和老版本差别太大。</p>
<p><strong>函数式编程语言F#</strong>：我个人觉得，F#如果用于开发多线程并行计算程序，会有较高的开发效率，而函数式编程的特点，也会使它在科学计算中有较好的表现。但用于开发CRUD之类的MIS系统，至少目前还是免谈吧。</p>
<p><strong>云计算</strong>：虽然我个人认可云计算是一个大的发展方向，但对于中国，这个技术是一道远方的亮丽风景，仅供观赏。因为国内还没有一个成熟的云计算平台，而微软的Azure目前又没有开放中国大陆的云计算购买服务，加上中国又有特殊的国情，所以一切都只是空中楼阁。云计算真正应用于国内，诸位请继续等待吧。了解Azure的最佳方法是看DAVID CHAPPELL的文章《Introducing Windows Azure》。</p>
<p>而CSDN网友阿彤则在自己的博客中对微软的技术发展路线提出了很多批评，他认为.NET设计思路很乱，是一个失败的产品，一个失败的平台。.NET可以快速做一些临时性的应用，可以快速做一些小应用。但要是去做一些大型的应用，前期很爽，后期就会痛苦不堪。永远都别指望能用.NET去开发出极致化的产品。</p>
<p>你的看法呢？欢迎讨论。</p>
<p><strong>【特别提示】</strong></p>
<p>CSDN从微软公司得到的确认，.NET框架新版本的正式名称中，<strong>版本号应该是4而不是4.0</strong>，因此我们应该说.NET 4和ASP.NET 4。请大家在交流中、撰写文章和图书时注意保持一致。</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.kaixinbc.com%2F2010%2F03%2Fnet-4.html&title=.NET+4%E5%90%84%E9%A1%B9%E6%8A%80%E6%9C%AF%E7%9A%84%E5%BA%94%E7%94%A8%E5%89%8D%E6%99%AF" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kaixinbc.com/2010/03/net-4.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>请解释一下webService？ 如何用.net实现webService</title>
		<link>http://www.kaixinbc.com/2010/02/webservice-net-webservice.html</link>
		<comments>http://www.kaixinbc.com/2010/02/webservice-net-webservice.html#comments</comments>
		<pubDate>Tue, 23 Feb 2010 13:03:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.kaixinbc.com/?p=434</guid>
		<description><![CDATA[webService可以描述为可以在 Web 上部署并可以被任何应用程序或其他服务调用的功能它可以是商业应用功能，也可以是系统功能，webService使用了SOAP这个所有主要供应商都支持的新标准协议，SOAP 使用 HTTP 在网络上进行通信或传递信息，使用 XML 定义数据能力
在.net中webService实现步骤：
1. 创建一个webService，生成相应的.asmx文件。
2. 添加一个通过 Internet 公开和调用的方法。此类方法又称为 [WebMethod]
3. 部署创建好的webService
4. 在将要调用webService的项目中添加web引用，生成相应的代理类。
5. 实例化代理类对象
6. 通过代理类对象调用相应的WebMethod
]]></description>
			<content:encoded><![CDATA[<p>webService可以描述为可以在 Web 上部署并可以被任何应用程序或其他服务调用的功能它可以是商业应用功能，也可以是系统功能，webService使用了SOAP这个所有主要供应商都支持的新标准协议，SOAP 使用 HTTP 在网络上进行通信或传递信息，使用 XML 定义数据能力</p>
<p>在.net中webService实现步骤：<br />
1. 创建一个webService，生成相应的.asmx文件。<br />
2. 添加一个通过 Internet 公开和调用的方法。此类方法又称为 [WebMethod]<br />
3. 部署创建好的webService<br />
4. 在将要调用webService的项目中添加web引用，生成相应的代理类。<br />
5. 实例化代理类对象<br />
6. 通过代理类对象调用相应的WebMethod</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.kaixinbc.com%2F2010%2F02%2Fwebservice-net-webservice.html&title=%E8%AF%B7%E8%A7%A3%E9%87%8A%E4%B8%80%E4%B8%8BwebService%EF%BC%9F+%E5%A6%82%E4%BD%95%E7%94%A8.net%E5%AE%9E%E7%8E%B0webService" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kaixinbc.com/2010/02/webservice-net-webservice.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.net面试题</title>
		<link>http://www.kaixinbc.com/2010/02/net-mianshi.html</link>
		<comments>http://www.kaixinbc.com/2010/02/net-mianshi.html#comments</comments>
		<pubDate>Tue, 23 Feb 2010 13:00:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.kaixinbc.com/?p=432</guid>
		<description><![CDATA[1.1.1 Visual Studio.NET 有几个集成开发环境？
○ A.一个 ○ B.两个 ○ C.三个 ○ D.四个
1.1.2  我们称.NET编程架构是什么？
○ A..NET Framework ○ B.VS.NET ○ C.XML Web Service ○ D.  开发工具
1.1.3 以下那些标准是与Web Service相关的
○ A..SOAP ○ B. WSDL ○ C.UDDI ○ D.  以上都是
1.1.4 SOAP标准是谁来制定的?
○ A. Microsoft ○ B. W3C ○ C.IBM ○ D. SUN
1.1.5  Visual Studio.NET 会支持多少种开发语言？
○ A. 两种 ○ [...]]]></description>
			<content:encoded><![CDATA[<p>1.1.1 Visual Studio.NET 有几个集成开发环境？<br />
○ A.一个 ○ B.两个 ○ C.三个 ○ D.四个<br />
1.1.2  我们称.NET编程架构是什么？<br />
○ A..NET Framework ○ B.VS.NET ○ C.XML Web Service ○ D.  开发工具<br />
1.1.3 以下那些标准是与Web Service相关的<br />
○ A..SOAP ○ B. WSDL ○ C.UDDI ○ D.  以上都是<br />
1.1.4 SOAP标准是谁来制定的?<br />
○ A. Microsoft ○ B. W3C ○ C.IBM ○ D. SUN<br />
1.1.5  Visual Studio.NET 会支持多少种开发语言？<br />
○ A. 两种 ○ B. 三种 ○ C.四种 ○ D. 多种<br />
1.1.6 ASP.NET  是用来开发何种应用的？<br />
○ A. Windows应用 ○ B. .NET组件类 ○ C. Web应用 ○ D. 命令行应用程序<br />
1.1.7  C#编译器将C#程序编译成什么样的代码？<br />
A. 汇编语言代码<br />
B. 机器语言代码<br />
C. 微软中间语言代码<br />
D.  二进制代码<br />
答案：C<br />
1.2 B 类题<br />
1.2.1 所有的.NET基类库是用什么语言编写的？<br />
○ A. C++ ○ B. C# ○ C.  VB.NET ○ D. 汇编<br />
1.2.2 什么语言提供了对XML注释的支持？<br />
○ A. C++ ○ B. C# ○ C. VB.NET ○ D.  Jscript<br />
1.2.3 关于微软中间语言，下面什么说法错误的？<br />
A. 它是解释执行的。<br />
B. 在执行时，它被转化为机器代码。<br />
C.  它是处理器无关的指令集。<br />
D. 它允许真正的跨语言集成。<br />
<script type="text/javascript"><!--
google_ad_client = "pub-6590413867458515";
/* adsense5 for kaixinbc wenzhang */
google_ad_slot = "9737719358";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script><br />
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
1.2.4 . ASP.NET比ASP相比较，下列哪个是不正确的？<br />
A. 支持更多编程语言<br />
B. 可以同时存在于一个应用程序里<br />
C.  用户界面和代码分离，大大提高编程质量<br />
D. 都支持页面级和应用程序级的跟踪调试<br />
1.2.5 关于VB.NET，与C#（发音，C  sharp）比较，下列哪项是不正确的？<br />
A. 都是类型安全的编程语言。<br />
B. 都支持自动垃圾收集。<br />
C. 都是面向对象的语言。<br />
D.  VB.NET不支持API调用。</p>
<p>1.2.6 微软在VS.NET默认安装中提供了几种编程语言的开发环境？<br />
A. 2种<br />
B. 3种<br />
C. 4种<br />
D. 5种</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.kaixinbc.com%2F2010%2F02%2Fnet-mianshi.html&title=.net%E9%9D%A2%E8%AF%95%E9%A2%98+" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kaixinbc.com/2010/02/net-mianshi.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用Asp+XmlHttp实现RssReader功能</title>
		<link>http://www.kaixinbc.com/2010/02/asp-xmlhttp-rssreader.html</link>
		<comments>http://www.kaixinbc.com/2010/02/asp-xmlhttp-rssreader.html#comments</comments>
		<pubDate>Mon, 01 Feb 2010 06:27:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[rssreader]]></category>
		<category><![CDATA[xmlhttp]]></category>

		<guid isPermaLink="false">http://www.kaixinbc.com/?p=285</guid>
		<description><![CDATA[&#60;style&#62;
body {margin:10px;background-color:#ffffff;margin-top:6px;}
form{margin:0px;}
* {font:12px tahoma;line-height:140%;color:#000000}
.title {font-weight:bold;color:red;}
.time {font:10px;color:#999999;}
a {text-decoration:none;color:blue;}
&#60;/style&#62;
&#60;script type=&#8221;text/javascript&#8221;&#62;
var switcher=0;
&#60;/script&#62;
&#60;body ondblclick=&#8221;if(switcher==0){document.styleSheets[0].addRule(&#8216;div&#8217;,'display:none&#8217;);switcher=1}else{document.styleSheets[0].addRule(&#8216;div&#8217;,'display:block&#8217;);switcher=0}&#8221;&#62;
&#60;form name=&#8221;rssform&#8221; method=post action=&#8221;"&#62;
RSS资源：&#60;INPUT TYPE=&#8221;text&#8221; NAME=&#8221;RssFeed&#8221; size=60 style=&#8221;height:22px&#8221; value=&#8221;&#60;%=request(&#8220;RssFeed&#8221;)%&#62;&#8221; onfocus=select()&#62; &#60;input type=&#8221;submit&#8221; value=&#8221;Read It&#8221;&#62; &#38;nbsp;&#38;nbsp;双击鼠标可以关闭摘要，只显示标题
&#60;/form&#62;
&#60;hr/&#62;
&#60;%
If(request(&#8220;RssFeed&#8221;)=&#8221;") Then
url=&#8221;/rss2.asp&#8221;
else
url=request(&#8220;RssFeed&#8221;)
End If
Set xml = Server.CreateObject(&#8220;Microsoft.XMLHTTP&#8221;)
xml.Open &#8221;GET&#8221;, url, False
xml.Send
Set xmlDom = server.createObject(&#8220;microsoft.xmldom&#8221;)
xmlDom.async=False
xmlDom.ValidateOnParse=false
xmlDom.load(xml.responseXML)
if xmlDom.ReadyState&#62;2 Then
set oItem=xmlDom.getElementsByTagName(&#8220;item&#8221;)
for i=0 to oItem.length-1
response.write &#8221;&#60;span style=&#8217;font:bold 9px verdana;color:#000000&#8242;&#62;&#8221;&#38;i+1&#38;&#8221;&#60;/span&#62;. &#60;a class=&#8217;title&#8217; href=&#8217;&#8221;&#38;oItem(i).childNodes(1).text&#38;&#8221;&#8216; target=&#8217;_blank&#8217;&#62;&#8221;&#38;oItem(i).childNodes(0).text&#38;&#8221;&#60;/a&#62; &#60;span class=&#8217;time&#8217;&#62;["&#38;oItem(i).childNodes(3).text&#38;"]&#60;br /&#62;&#8221;
response.write &#8221;&#60;div&#62;摘要：&#8221;&#38;oItem(i).childNodes(4).text&#38;&#8221;&#60;/div&#62;&#60;br&#62;&#8221;
next
end if
%&#62;
]]></description>
			<content:encoded><![CDATA[<p>&lt;style&gt;<br />
body {margin:10px;background-color:#ffffff;margin-top:6px;}<br />
form{margin:0px;}<br />
* {font:12px tahoma;line-height:140%;color:#000000}<br />
.title {font-weight:bold;color:red;}<br />
.time {font:10px;color:#999999;}<br />
a {text-decoration:none;color:blue;}<br />
&lt;/style&gt;<br />
&lt;script type=&#8221;text/javascript&#8221;&gt;<br />
var switcher=0;<br />
&lt;/script&gt;<br />
&lt;body ondblclick=&#8221;if(switcher==0){document.styleSheets[0].addRule(&#8216;div&#8217;,'display:none&#8217;);switcher=1}else{document.styleSheets[0].addRule(&#8216;div&#8217;,'display:block&#8217;);switcher=0}&#8221;&gt;<br />
&lt;form name=&#8221;rssform&#8221; method=post action=&#8221;"&gt;<br />
RSS资源：&lt;INPUT TYPE=&#8221;text&#8221; NAME=&#8221;RssFeed&#8221; size=60 style=&#8221;height:22px&#8221; value=&#8221;&lt;%=request(&#8220;RssFeed&#8221;)%&gt;&#8221; onfocus=select()&gt; &lt;input type=&#8221;submit&#8221; value=&#8221;Read It&#8221;&gt; &amp;nbsp;&amp;nbsp;双击鼠标可以关闭摘要，只显示标题<br />
&lt;/form&gt;<br />
&lt;hr/&gt;<br />
&lt;%<br />
If(request(&#8220;RssFeed&#8221;)=&#8221;") Then<br />
url=&#8221;/rss2.asp&#8221;<br />
else<br />
url=request(&#8220;RssFeed&#8221;)<br />
End If</p>
<p>Set xml = Server.CreateObject(&#8220;Microsoft.XMLHTTP&#8221;)<br />
xml.Open &#8221;GET&#8221;, url, False<br />
xml.Send</p>
<p>Set xmlDom = server.createObject(&#8220;microsoft.xmldom&#8221;)<br />
xmlDom.async=False<br />
xmlDom.ValidateOnParse=false<br />
xmlDom.load(xml.responseXML)</p>
<p>if xmlDom.ReadyState&gt;2 Then</p>
<p>set oItem=xmlDom.getElementsByTagName(&#8220;item&#8221;)</p>
<p>for i=0 to oItem.length-1<br />
response.write &#8221;&lt;span style=&#8217;font:bold 9px verdana;color:#000000&#8242;&gt;&#8221;&amp;i+1&amp;&#8221;&lt;/span&gt;. &lt;a class=&#8217;title&#8217; href=&#8217;&#8221;&amp;oItem(i).childNodes(1).text&amp;&#8221;&#8216; target=&#8217;_blank&#8217;&gt;&#8221;&amp;oItem(i).childNodes(0).text&amp;&#8221;&lt;/a&gt; &lt;span class=&#8217;time&#8217;&gt;["&amp;oItem(i).childNodes(3).text&amp;"]&lt;br /&gt;&#8221;<br />
response.write &#8221;&lt;div&gt;摘要：&#8221;&amp;oItem(i).childNodes(4).text&amp;&#8221;&lt;/div&gt;&lt;br&gt;&#8221;<br />
next<br />
end if<br />
%&gt;</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.kaixinbc.com%2F2010%2F02%2Fasp-xmlhttp-rssreader.html&title=%E7%94%A8Asp%2BXmlHttp%E5%AE%9E%E7%8E%B0RssReader%E5%8A%9F%E8%83%BD" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kaixinbc.com/2010/02/asp-xmlhttp-rssreader.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET4.0的新功能 SEO 增强</title>
		<link>http://www.kaixinbc.com/2010/01/asp-net-2.html</link>
		<comments>http://www.kaixinbc.com/2010/01/asp-net-2.html#comments</comments>
		<pubDate>Wed, 27 Jan 2010 11:48:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[开源技术]]></category>
		<category><![CDATA[编程]]></category>

		<guid isPermaLink="false">http://www.kaixinbc.com/?p=196</guid>
		<description><![CDATA[　　ASP.NET4.0提供了一系列新的特性实现网站的 SEO优化，包括：
　　Page类的新属性：Page.MetaKeywords 和 Page.MetaDescription;
　　ASP.NET Web Forms 新的URL路由功能;
　　Response.RedirectPermanent()、Response.RedirectToRoutePermanent()方法等。
　　Page.MetaKeywords 和 Page.MetaDescription属性将生成 html 标记中的 和 ，例如
　　C# 代码
　　Page.MetaDescription = &#8220;ASP.NET 4.0学习站点：http://dotnet.aspx.cc/&#8221;;
　　Page.MetaKeywords = &#8220;孟宪会&#8221;;
　　将生成如下的代码：
　　HTML 代码
　　Response.RedirectPermanent()将进行HTTP 301(Moved Permanently)重定向。
]]></description>
			<content:encoded><![CDATA[<p>　　ASP.NET4.0提供了一系列新的特性实现网站的 SEO优化，包括：</p>
<p>　　Page类的新属性：Page.MetaKeywords 和 Page.MetaDescription;</p>
<p>　　ASP.NET Web Forms 新的URL路由功能;</p>
<p>　　Response.RedirectPermanent()、Response.RedirectToRoutePermanent()方法等。</p>
<p>　　Page.MetaKeywords 和 Page.MetaDescription属性将生成 html 标记中的 和 ，例如</p>
<p>　　C# 代码</p>
<p>　　Page.MetaDescription = &#8220;ASP.NET 4.0学习站点：http://dotnet.aspx.cc/&#8221;;</p>
<p>　　Page.MetaKeywords = &#8220;孟宪会&#8221;;</p>
<p>　　将生成如下的代码：</p>
<p>　　HTML 代码</p>
<p>　　Response.RedirectPermanent()将进行HTTP 301(Moved Permanently)重定向。</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.kaixinbc.com%2F2010%2F01%2Fasp-net-2.html&title=ASP.NET4.0%E7%9A%84%E6%96%B0%E5%8A%9F%E8%83%BD+SEO+%E5%A2%9E%E5%BC%BA" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kaixinbc.com/2010/01/asp-net-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于.net平台的web框架搭建</title>
		<link>http://www.kaixinbc.com/2010/01/net-web.html</link>
		<comments>http://www.kaixinbc.com/2010/01/net-web.html#comments</comments>
		<pubDate>Wed, 27 Jan 2010 11:42:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://www.kaixinbc.com/?p=193</guid>
		<description><![CDATA[　　最近基于ExtJs和asp.net mvc做了一个系统.来总结下.一起讨论下.
　　一.技术分析
　　1.web数据传输
　　ExtJS作为前端UI展现层,传输数据格式为json或者xml,一般大部分为json.
　　2.asp.net mvc
　　(不要考虑太多mvc其他特性,controller+method就够了)的和路由url很好的符合了这一要求,实现起来很轻松.
　　3.选一款依赖注入容器
　　只要你好好学过一款Ioc组件,概念都还是一样的，做法不同而已,我选的是微软的Unity,
　　这里我并没有把Service配置在xml中,根据我的理解,大部分软件并不需要这么灵活,我就纯注册就够了(其实往往是这样,我们可以问问自己，我们用到了多少功能).因为大部分都是注册一次，永不修改的…真的有必要的时候可以提出
　　Ioc组件很多，个人认为比较强大的还是spring.net,功能非常丰富，还有AOP功能，最主要的是其可以和其他组件结合的很好.
　　容器作为底层服务,主要就是为我们提供灵活性.想办法与现有组件结合,注册相关服务.
　　4.数据库操作(NHibernate)
　　3年前我会选ADO.NET
　　2年前我选Microsoft.Practices.Data.Application
　　1年前我选linq to sql
　　现在我选nhibernate
　　关于NHibernate映射
　　(1)若你是初学者,乖乖的自己手动配吧
　　(2)若你喜欢linq的,有一款FluentNHibernate可供选择(用新技术请考虑风险,玩的没关系)
　　(3)若你映射配置文件玩的很熟悉了,就用NHibernate.Mapping.Attributes挂标签自动生成吧(不推荐用什么代码生成器,都是要重新改的)
　　5.比较java web经典平台
　　比较庆幸,之前有接触过java,java的web编程架构很稳定,3年前如此,现在还是一样,不同的只是版本升级而已,这点.net程序员比较惨的.这也见证了spring,hibernate,struts(webwork)在目前而言是最好的拍档.
　　换成.net平台也就是spring.net(Ioc容器)+nhibernate(orm)+asp.net mvc
　　spring.net和nhibernate都属于java移植产品,所以应该来说资料是非常的多,想学习的人,应该把眼光放到java社区中,收获会很多的,稍微比较下c#和java语言就好了(千万别学了就跑去学java了:)).
　　asp.net mvc对比struts而言,方便了很多,但不同的是java附产品比较多,像asp.net mvc这样的框架,java也有些框架已经开始改进了(看到过,基本上理念是一样的).
　　当然这里均采用的开源路线,大家也可以采用微软自家平台的技术.
　　二.技术串联
　　1.注册容器
　　2.初始化Nhibernate
　　我们都知道Ioc是可以与asp.net mvc结合的
　　3.Nhibernate与容器配合法
　　(1)Nhibernate与spring.net的结合,这里已经有经典例子在了,何谓经典例子,就是大家都这么干,而且也没出什么问题，我也就这么干,确实有点道理的…虽然有时候真不懂为什么这么干。。。呵呵
　　(2)用单例的方式在应用启动时注册,如上法
　　(3)Nhibernate若映射换FluentNHibernate的话,或者加入linq to nh,则整个设计就要重新考虑了
　　我想上面的设计有点意思,特别是加入了linq to nh我的设想是这样的
　　(1)简单查询用linq to nh
　　(2)hql主打,标准查询辅助…
　　(3)若由于对nh框架不熟,导致查不出来，或者遇到速度慢,先上t-sql(原因一般都是自身学的不好造成的，先怀疑自己，怀疑不下去了再去怀疑框架本身…)
　　三.项目细分
　　这里忽略分布式应用,我没具体搞过…
　　Entity项目一个
　　Service接口项目一个
　　Service接口默认实现项目一个
　　Domain项目一个
　　主体辅助类项目一个(放杂七杂八用的)
　　测试项目一个(可选)
　　web相关项目一个(放与web相关的和controller)
　　web主打项目一个(运行项目,主放js用…)
　　基本上最基本的就是这样,你可以细分,也可以把上面很多项目合并为同一项目.
　　若想灵活就多用反射与配置文件
　　四.细化
　　若要完成一般的数据增删改系统的话,我们还可以稍微细化封装,这样的封装是很方便的.
　　1.没有绝对的灵活,需要一定的耦合,ext框架对于后端请求的json数据有一定要求,所以数据转换在所难免,所以准备一些通用的数据类型转换的功能
　　2.对于千篇一律的数据增删改,若无特殊的业务逻辑,可考虑借助asp.net mvc和反射功能完成,这样一个controller的设计可以代替很多个.
　　3.在传json时勿使用延迟加载等特性.
　　4.一个hql配置系统,不要因为某一查询条件改了而重新编写代码,可以考虑做个机制,把hql语句提取出来
　　5.巧用nhibernate拦截机制,日志必不可少
　　6.一套稳定的权限机制
　　7.对于ext,要有一套js加载机制
　　总结起来细化的都是对于不同需求而变化设计的.
　　如果不是很难的项目,花一段时间实践,这种搭配很容易学会.
　　接下来重点还是回到.net framework来学习.
]]></description>
			<content:encoded><![CDATA[<p>　　最近基于ExtJs和asp.net mvc做了一个系统.来总结下.一起讨论下.</p>
<p>　　一.技术分析</p>
<p>　　1.web数据传输</p>
<p>　　ExtJS作为前端UI展现层,传输数据格式为json或者xml,一般大部分为json.</p>
<p>　　2.asp.net mvc</p>
<p>　　(不要考虑太多mvc其他特性,controller+method就够了)的和路由url很好的符合了这一要求,实现起来很轻松.</p>
<p>　　3.选一款依赖注入容器</p>
<p>　　只要你好好学过一款Ioc组件,概念都还是一样的，做法不同而已,我选的是微软的Unity,</p>
<p>　　这里我并没有把Service配置在xml中,根据我的理解,大部分软件并不需要这么灵活,我就纯注册就够了(其实往往是这样,我们可以问问自己，我们用到了多少功能).因为大部分都是注册一次，永不修改的…真的有必要的时候可以提出</p>
<p>　　Ioc组件很多，个人认为比较强大的还是spring.net,功能非常丰富，还有AOP功能，最主要的是其可以和其他组件结合的很好.</p>
<p>　　容器作为底层服务,主要就是为我们提供灵活性.想办法与现有组件结合,注册相关服务.</p>
<p>　　4.数据库操作(NHibernate)</p>
<p>　　3年前我会选ADO.NET</p>
<p>　　2年前我选Microsoft.Practices.Data.Application</p>
<p>　　1年前我选linq to sql</p>
<p>　　现在我选nhibernate</p>
<p>　　关于NHibernate映射</p>
<p>　　(1)若你是初学者,乖乖的自己手动配吧</p>
<p>　　(2)若你喜欢linq的,有一款FluentNHibernate可供选择(用新技术请考虑风险,玩的没关系)</p>
<p>　　(3)若你映射配置文件玩的很熟悉了,就用NHibernate.Mapping.Attributes挂标签自动生成吧(不推荐用什么代码生成器,都是要重新改的)</p>
<p>　　5.比较java web经典平台</p>
<p>　　比较庆幸,之前有接触过java,java的web编程架构很稳定,3年前如此,现在还是一样,不同的只是版本升级而已,这点.net程序员比较惨的.这也见证了spring,hibernate,struts(webwork)在目前而言是最好的拍档.</p>
<p>　　换成.net平台也就是spring.net(Ioc容器)+nhibernate(orm)+asp.net mvc</p>
<p>　　spring.net和nhibernate都属于java移植产品,所以应该来说资料是非常的多,想学习的人,应该把眼光放到java社区中,收获会很多的,稍微比较下c#和java语言就好了(千万别学了就跑去学java了:)).</p>
<p>　　asp.net mvc对比struts而言,方便了很多,但不同的是java附产品比较多,像asp.net mvc这样的框架,java也有些框架已经开始改进了(看到过,基本上理念是一样的).</p>
<p>　　当然这里均采用的开源路线,大家也可以采用微软自家平台的技术.</p>
<p>　　二.技术串联</p>
<p>　　1.注册容器</p>
<p>　　2.初始化Nhibernate</p>
<p>　　我们都知道Ioc是可以与asp.net mvc结合的</p>
<p>　　3.Nhibernate与容器配合法</p>
<p>　　(1)Nhibernate与spring.net的结合,这里已经有经典例子在了,何谓经典例子,就是大家都这么干,而且也没出什么问题，我也就这么干,确实有点道理的…虽然有时候真不懂为什么这么干。。。呵呵</p>
<p>　　(2)用单例的方式在应用启动时注册,如上法</p>
<p>　　(3)Nhibernate若映射换FluentNHibernate的话,或者加入linq to nh,则整个设计就要重新考虑了</p>
<p>　　我想上面的设计有点意思,特别是加入了linq to nh我的设想是这样的</p>
<p>　　(1)简单查询用linq to nh</p>
<p>　　(2)hql主打,标准查询辅助…</p>
<p>　　(3)若由于对nh框架不熟,导致查不出来，或者遇到速度慢,先上t-sql(原因一般都是自身学的不好造成的，先怀疑自己，怀疑不下去了再去怀疑框架本身…)</p>
<p>　　三.项目细分</p>
<p>　　这里忽略分布式应用,我没具体搞过…</p>
<p>　　Entity项目一个</p>
<p>　　Service接口项目一个</p>
<p>　　Service接口默认实现项目一个</p>
<p>　　Domain项目一个</p>
<p>　　主体辅助类项目一个(放杂七杂八用的)</p>
<p>　　测试项目一个(可选)</p>
<p>　　web相关项目一个(放与web相关的和controller)</p>
<p>　　web主打项目一个(运行项目,主放js用…)</p>
<p>　　基本上最基本的就是这样,你可以细分,也可以把上面很多项目合并为同一项目.</p>
<p>　　若想灵活就多用反射与配置文件</p>
<p>　　四.细化</p>
<p>　　若要完成一般的数据增删改系统的话,我们还可以稍微细化封装,这样的封装是很方便的.</p>
<p>　　1.没有绝对的灵活,需要一定的耦合,ext框架对于后端请求的json数据有一定要求,所以数据转换在所难免,所以准备一些通用的数据类型转换的功能</p>
<p>　　2.对于千篇一律的数据增删改,若无特殊的业务逻辑,可考虑借助asp.net mvc和反射功能完成,这样一个controller的设计可以代替很多个.</p>
<p>　　3.在传json时勿使用延迟加载等特性.</p>
<p>　　4.一个hql配置系统,不要因为某一查询条件改了而重新编写代码,可以考虑做个机制,把hql语句提取出来</p>
<p>　　5.巧用nhibernate拦截机制,日志必不可少</p>
<p>　　6.一套稳定的权限机制</p>
<p>　　7.对于ext,要有一套js加载机制</p>
<p>　　总结起来细化的都是对于不同需求而变化设计的.</p>
<p>　　如果不是很难的项目,花一段时间实践,这种搭配很容易学会.</p>
<p>　　接下来重点还是回到.net framework来学习.</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.kaixinbc.com%2F2010%2F01%2Fnet-web.html&title=%E5%9F%BA%E4%BA%8E.net%E5%B9%B3%E5%8F%B0%E7%9A%84web%E6%A1%86%E6%9E%B6%E6%90%AD%E5%BB%BA" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kaixinbc.com/2010/01/net-web.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何在ASP.Net 中把图片存入数据库</title>
		<link>http://www.kaixinbc.com/2010/01/asp-net-save-picture.html</link>
		<comments>http://www.kaixinbc.com/2010/01/asp-net-save-picture.html#comments</comments>
		<pubDate>Tue, 26 Jan 2010 01:56:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[开源技术]]></category>

		<guid isPermaLink="false">http://www.kaixinbc.com/?p=101</guid>
		<description><![CDATA[介绍
   可能有很多的时候，我们急需把图片存入到数据库当中。在一些应用程序中，我们可能有一些敏感的资料，由于存储在文件系统（file system）中的东西，将很容易被某些用户盗取，所以这些数据不能存放在文件系统中。
  在这篇文章中，我们将讨论怎样把图片存入到Sql2000当中。
  在这篇文章中我们可以学到以下几个方面的知识：
1.     插入图片的必要条件
2.     使用流对象
  3. 查找准备上传的图片的大小和类型
4．怎么使用InputStream方法？
插入图片的必要条件
在我们开始上传之前，有两件重要的事我们需要做：
＃Form 标记的 enctype 属性应该设置成 enctype=&#8221;multipart/form-data&#8221;
# 需要一个&#60;input type=file&#62;表单来使用户选择他们要上传的文件，同时我们需要导入 System.IO名称空间来处理流对象
把以上三点应用到aspx页面。同时我们需要对SqlServer做以下的准备。
＃ 需要至少含有一个图片类型的字段的表
＃ 如果我们还有另外一个变字符类型的字段来存储图片类型，那样会更好一些。
现在，我们准备了一个Sql表（包含了一个image数据类型的字段）,还有&#60;input type=file&#62;标记。当然我们还得准备Submit按钮，以便用户在选择了图片以后提交。在这个按钮的Onclick事件里，我们需要读取选取图片的内容，然后把它存入到表里。那我们先来看看这个Onclick事件。
提交按钮的Onclick事件的代码：
Dim intImageSize As Int64
     Dim strImageType As String
     Dim ImageStream As Stream
    &#8217; Gets the Size of the Image
    intImageSize = PersonImage.PostedFile.ContentLength
    &#8217; Gets the Image Type
    strImageType = PersonImage.PostedFile.ContentType
    &#8217; Reads the Image
    ImageStream = PersonImage.PostedFile.InputStream
    Dim ImageContent(intImageSize) As Byte
    Dim intStatus As Integer
    intStatus = ImageStream.Read(ImageContent, 0, intImageSize)
    &#8217; Create Instance of Connection [...]]]></description>
			<content:encoded><![CDATA[<p>介绍</p>
<p>   可能有很多的时候，我们急需把图片存入到数据库当中。在一些应用程序中，我们可能有一些敏感的资料，由于存储在文件系统（file system）中的东西，将很容易被某些用户盗取，所以这些数据不能存放在文件系统中。</p>
<p>  在这篇文章中，我们将讨论怎样把图片存入到Sql2000当中。</p>
<p>  在这篇文章中我们可以学到以下几个方面的知识：</p>
<p>1.     插入图片的必要条件</p>
<p>2.     使用流对象</p>
<p>  3. 查找准备上传的图片的大小和类型</p>
<p>4．怎么使用InputStream方法？</p>
<p>插入图片的必要条件</p>
<p>在我们开始上传之前，有两件重要的事我们需要做：</p>
<p>＃Form 标记的 enctype 属性应该设置成 enctype=&#8221;multipart/form-data&#8221;</p>
<p># 需要一个&lt;input type=file&gt;表单来使用户选择他们要上传的文件，同时我们需要导入 System.IO名称空间来处理流对象</p>
<p>把以上三点应用到aspx页面。同时我们需要对SqlServer做以下的准备。</p>
<p>＃ 需要至少含有一个图片类型的字段的表</p>
<p>＃ 如果我们还有另外一个变字符类型的字段来存储图片类型，那样会更好一些。</p>
<p>现在，我们准备了一个Sql表（包含了一个image数据类型的字段）,还有&lt;input type=file&gt;标记。当然我们还得准备Submit按钮，以便用户在选择了图片以后提交。在这个按钮的Onclick事件里，我们需要读取选取图片的内容，然后把它存入到表里。那我们先来看看这个Onclick事件。</p>
<p>提交按钮的Onclick事件的代码：</p>
<p>Dim intImageSize As Int64<br />
     Dim strImageType As String<br />
     Dim ImageStream As Stream</p>
<p>    &#8217; Gets the Size of the Image<br />
    intImageSize = PersonImage.PostedFile.ContentLength</p>
<p>    &#8217; Gets the Image Type<br />
    strImageType = PersonImage.PostedFile.ContentType</p>
<p>    &#8217; Reads the Image<br />
    ImageStream = PersonImage.PostedFile.InputStream</p>
<p>    Dim ImageContent(intImageSize) As Byte<br />
    Dim intStatus As Integer<br />
    intStatus = ImageStream.Read(ImageContent, 0, intImageSize)</p>
<p>    &#8217; Create Instance of Connection and Command Object<br />
    Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings(&#8220;ConnectionString&#8221;))<br />
    Dim myCommand As New SqlCommand(&#8220;sp_person_isp&#8221;, myConnection)</p>
<p>    &#8217; Mark the Command as a SPROC<br />
    myCommand.CommandType = CommandType.StoredProcedure</p>
<p>    &#8217; Add Parameters to SPROC<br />
    Dim prmPersonImage As New SqlParameter(&#8220;@PersonImage&#8221;, SqlDbType.Image)<br />
    prmPersonImage.Value = ImageContent<br />
    myCommand.Parameters.Add(prmPersonImage)</p>
<p>    Dim prmPersonImageType As New SqlParameter(&#8220;@PersonImageType&#8221;, SqlDbType.VarChar, 255)<br />
    prmPersonImageType.Value = strImageType<br />
    myCommand.Parameters.Add(prmPersonImageType)</p>
<p>    Try<br />
        myConnection.Open()<br />
        myCommand.ExecuteNonQuery()<br />
        myConnection.Close()<br />
        Response.Write(&#8220;New person successfully added!&#8221;)<br />
    Catch SQLexc As SqlException<br />
        Response.Write(&#8220;Insert Failed. Error Details are: &#8221; &amp; SQLexc.ToString())<br />
    End Try</p>
<p>这是怎么工作的呢？<br />
PersonImage是HTMLInputFile控件的对象。首先需要获得图片的大小，可以使用下面的代码实现：</p>
<p>intImageSize = PersonImage.PostedFile.ContentLength</p>
<p>然后返回图片的类型使用ContenType属性。最后，也是最重要的事就是取得Image Stream,这可以用以下代码实现：</p>
<p>ImageStream = PersonImage.PostedFile.InputStream</p>
<p>我们需要一个字节型数组来存储image 内容。读取整个图片可以使用Stream对象的Read方法来实现。Read（in byte[] buffer,int offset,int count）方法有三个参数。【关于Read方法的详细可以参看.Net FrameWorkSDK】他们是：</p>
<p>buffer</p>
<p>字节数组。此方法返回时，该缓冲区包含指定的字符数组，该数组的 offset 和 (offset + count) 之间的值由从当前源中读取的字节替换。</p>
<p>offset</p>
<p>buffer 中的从零开始的字节偏移量，从此处开始存储从当前流中读取的数据。</p>
<p>count</p>
<p>要从当前流中最多读取的字节数。</p>
<p>这个Read方法用以下代码实现：<br />
intStatus = ImageStream.Read(ImageContent, 0, intImageSize)<br />
.</p>
<p>现在，我们已经读取了整个图片的内容，下一步，我们要把这些内容存入到sql 表。我们将使用存储过程来完成插入图片类型和图片内容到sql 表。如果你浏览了上面的代码，你将会发现我们使用了sqldbtype.image的数据类型（datatype）。Ok了，完成了这些，我们也就成功的把图片存入到SqlServer中了。下面是我们编写的aspx页面。</p>
<p>结论</p>
<p>我们已经讨论了如何把图片存入到Sql Server，那么我们如何从SqlServer中读取图片呢？可以参看我的另一篇文章：在Asp.Net中从SqlServer中检索图片。</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.kaixinbc.com%2F2010%2F01%2Fasp-net-save-picture.html&title=%E5%A6%82%E4%BD%95%E5%9C%A8ASP.Net+%E4%B8%AD%E6%8A%8A%E5%9B%BE%E7%89%87%E5%AD%98%E5%85%A5%E6%95%B0%E6%8D%AE%E5%BA%93" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kaixinbc.com/2010/01/asp-net-save-picture.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>认识ASP.NET配置文件Web.config</title>
		<link>http://www.kaixinbc.com/2010/01/asp-net-webconfig.html</link>
		<comments>http://www.kaixinbc.com/2010/01/asp-net-webconfig.html#comments</comments>
		<pubDate>Tue, 26 Jan 2010 01:52:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[开源技术]]></category>

		<guid isPermaLink="false">http://www.kaixinbc.com/?p=98</guid>
		<description><![CDATA[一、认识Web.config文件
　　Web.config文件是一个XML文本文件，它用来储存 ASP.NET Web 应用程序的配置信息（如最常用的设置ASP.NET Web 应用程序的身份验证方式），它可以出现在应用程序的每一个目录中。当你通过VB.NET新建一个Web应用程序后，默认情况下会在根目录自动创建一个默认的
Web.config文件，包括默认的配置设置，所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置，你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息，也可以重写或修改父目录中定义的设置。
　　在运行时对Web.config文件的修改不需要重启服务就可以生效（注：&#60;processModel&#62; 节例外）。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。
　　二、web.config配置文件（默认的配置设置）以下所有的代码都应该位于
&#60;configuration&#62;
&#60;system.web&#62;
　　和
&#60;/system.web&#62;
&#60;/configuration&#62;
　　之间，出于学习的目的下面的示例都省略了这段XML标记
　　1、&#60;authentication&#62; 节
　　作用：配置 ASP.NET 身份验证支持（为Windows、Forms、PassPort、None四种）。该元素只能在计算机、站点或应用程序级别声明。&#60;authentication&#62; 元素必需与&#60;authorization&#62; 节配合使用。
　　示例：
　　以下示例为基于窗体（Forms）的身份验证配置站点，当没有登陆的用户访问需要身份验证的网页，网页自动跳转到登陆网页。
&#60;authentication mode=&#8221;Forms&#8221; &#62;
&#60;forms loginUrl=&#8221;logon.aspx&#8221; name=&#8221;.FormsAuthCookie&#8221;/&#62;
&#60;/authentication&#62;
　　其中元素loginUrl表示登陆网页的名称，name表示Cookie名称
　　2、&#60;authorization&#62; 节
　　作用：控制对 URL 资源的客户端访问（如允许匿名用户访问）。此元素可以在任何级别（计算机、站点、应用程序、子目录或页）上声明。必需与&#60;authentication&#62; 节配合使用。
　　示例：以下示例禁止匿名用户的访问
&#60;authorization&#62;
　&#60;deny users=&#8221;?&#8221;/&#62;
&#60;/authorization&#62;
　　注：你可以使用user.identity.name来获取已经过验证的当前的用户名；可以使用
web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的实例请参考:
　　Forms验证 http://www.fanvb.net/websample/dataauth.aspx
　　3、&#60;compilation&#62;节
　　作用：配置 ASP.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为True（Web.config文件中有详细说明，此处省略示例）
　　4、&#60;customErrors&#62;
　　作用：为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XML Web services 中发生的错误。
　　示例：当发生错误时，将网页跳转到自定义的错误页面。
&#60;customErrors defaultRedirect=&#8221;ErrorPage.aspx&#8221; mode=&#8221;RemoteOnly&#8221;&#62;
&#60;/customErrors&#62;
　　其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示：对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。
　　5、&#60;httpRuntime&#62;节
　　作用：配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。
　　示例：控制用户上传文件最大为4M，最长时间为60秒，最多请求数为100
&#60;httpRuntime maxRequestLength=&#8221;4096&#8243; executionTimeout=&#8221;60&#8243; appRequestQueueLimit=&#8221;100&#8243;/&#62;
　　6、 &#60;pages&#62;
　　作用：标识特定于页的配置设置（如是否启用会话状态、视图状态，是否检测用户的输入等）。&#60;pages&#62;可以在计算机、站点、应用程序和子目录级别声明。
　　示例：不检测用户在浏览器输入的内容中是否存在潜在的危险数据（注：该项默认是检测，如果你使用了不检测，一要对用户的输入进行编码或验证)，在从客户端回发页时将检查加密的视图状态，以验证视图状态是否已在客户端被篡改。(注：该项默认是不验证）
&#60;pages buffer=&#8221;true&#8221; enableViewStateMac=&#8221;true&#8221; validateRequest=&#8221;false&#8221;/&#62;
　　7、&#60;sessionState&#62;
　　作用：为当前应用程序配置会话状态设置（如设置是否启用会话状态，会话状态保存位置）。
　　示例：
&#60;sessionState mode=&#8221;InProc&#8221; cookieless=&#8221;true&#8221; timeout=&#8221;20&#8243;/&#62;
&#60;/sessionState&#62;
　　注：
　　mode=&#8221;InProc&#8221;表示：在本地储存会话状态（你也可以选择储存在远程服务器或SAL服务器中或不启用会话状态）
　　cookieless=&#8221;true&#8221;表示：如果用户浏览器不支持Cookie时启用会话状态(默认为False）
　　timeout=&#8221;20&#8243;表示：会话可以处于空闲状态的分钟数
　　8、&#60;trace&#62;
　　作用：配置 ASP.NET 跟踪服务，主要用来程序测试判断哪里出错。
　　示例：以下为Web.config中的默认配置：
&#60;trace enabled=&#8221;false&#8221; requestLimit=&#8221;10&#8243; pageOutput=&#8221;false&#8221; traceMode=&#8221;SortByTime&#8221; localOnly=&#8221;true&#8221; /&#62;
　　注：
　　enabled=&#8221;false&#8221;表示不启用跟踪；requestLimit=&#8221;10&#8243;表示指定在服务器上存储的跟踪请求的数目
　　pageOutput=&#8221;false&#8221;表示只能通过跟踪实用工具访问跟踪输出；
　　traceMode=&#8221;SortByTime&#8221;表示以处理跟踪的顺序来显示跟踪信息
　　localOnly=&#8221;true&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>一、认识Web.config文件<br />
　　Web.config文件是一个XML文本文件，它用来储存 ASP.NET Web 应用程序的配置信息（如最常用的设置ASP.NET Web 应用程序的身份验证方式），它可以出现在应用程序的每一个目录中。当你通过VB.NET新建一个Web应用程序后，默认情况下会在根目录自动创建一个默认的<br />
Web.config文件，包括默认的配置设置，所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置，你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息，也可以重写或修改父目录中定义的设置。</p>
<p>　　在运行时对Web.config文件的修改不需要重启服务就可以生效（注：&lt;processModel&gt; 节例外）。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。</p>
<p>　　二、web.config配置文件（默认的配置设置）以下所有的代码都应该位于</p>
<p>&lt;configuration&gt;<br />
&lt;system.web&gt;</p>
<p>　　和</p>
<p>&lt;/system.web&gt;<br />
&lt;/configuration&gt;</p>
<p>　　之间，出于学习的目的下面的示例都省略了这段XML标记</p>
<p>　　1、&lt;authentication&gt; 节</p>
<p>　　作用：配置 ASP.NET 身份验证支持（为Windows、Forms、PassPort、None四种）。该元素只能在计算机、站点或应用程序级别声明。&lt;authentication&gt; 元素必需与&lt;authorization&gt; 节配合使用。</p>
<p>　　示例：</p>
<p>　　以下示例为基于窗体（Forms）的身份验证配置站点，当没有登陆的用户访问需要身份验证的网页，网页自动跳转到登陆网页。</p>
<p>&lt;authentication mode=&#8221;Forms&#8221; &gt;<br />
&lt;forms loginUrl=&#8221;logon.aspx&#8221; name=&#8221;.FormsAuthCookie&#8221;/&gt;</p>
<p>&lt;/authentication&gt;</p>
<p>　　其中元素loginUrl表示登陆网页的名称，name表示Cookie名称</p>
<p>　　2、&lt;authorization&gt; 节</p>
<p>　　作用：控制对 URL 资源的客户端访问（如允许匿名用户访问）。此元素可以在任何级别（计算机、站点、应用程序、子目录或页）上声明。必需与&lt;authentication&gt; 节配合使用。</p>
<p>　　示例：以下示例禁止匿名用户的访问</p>
<p>&lt;authorization&gt;<br />
　&lt;deny users=&#8221;?&#8221;/&gt;<br />
&lt;/authorization&gt;</p>
<p>　　注：你可以使用user.identity.name来获取已经过验证的当前的用户名；可以使用<br />
web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的实例请参考:</p>
<p>　　Forms验证 http://www.fanvb.net/websample/dataauth.aspx</p>
<p>　　3、&lt;compilation&gt;节</p>
<p>　　作用：配置 ASP.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为True（Web.config文件中有详细说明，此处省略示例）</p>
<p>　　4、&lt;customErrors&gt;</p>
<p>　　作用：为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XML Web services 中发生的错误。</p>
<p>　　示例：当发生错误时，将网页跳转到自定义的错误页面。</p>
<p>&lt;customErrors defaultRedirect=&#8221;ErrorPage.aspx&#8221; mode=&#8221;RemoteOnly&#8221;&gt;<br />
&lt;/customErrors&gt;</p>
<p>　　其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示：对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。</p>
<p>　　5、&lt;httpRuntime&gt;节</p>
<p>　　作用：配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。</p>
<p>　　示例：控制用户上传文件最大为4M，最长时间为60秒，最多请求数为100</p>
<p>&lt;httpRuntime maxRequestLength=&#8221;4096&#8243; executionTimeout=&#8221;60&#8243; appRequestQueueLimit=&#8221;100&#8243;/&gt;</p>
<p>　　6、 &lt;pages&gt;</p>
<p>　　作用：标识特定于页的配置设置（如是否启用会话状态、视图状态，是否检测用户的输入等）。&lt;pages&gt;可以在计算机、站点、应用程序和子目录级别声明。</p>
<p>　　示例：不检测用户在浏览器输入的内容中是否存在潜在的危险数据（注：该项默认是检测，如果你使用了不检测，一要对用户的输入进行编码或验证)，在从客户端回发页时将检查加密的视图状态，以验证视图状态是否已在客户端被篡改。(注：该项默认是不验证）</p>
<p>&lt;pages buffer=&#8221;true&#8221; enableViewStateMac=&#8221;true&#8221; validateRequest=&#8221;false&#8221;/&gt;</p>
<p>　　7、&lt;sessionState&gt;</p>
<p>　　作用：为当前应用程序配置会话状态设置（如设置是否启用会话状态，会话状态保存位置）。</p>
<p>　　示例：</p>
<p>&lt;sessionState mode=&#8221;InProc&#8221; cookieless=&#8221;true&#8221; timeout=&#8221;20&#8243;/&gt;<br />
&lt;/sessionState&gt;</p>
<p>　　注：</p>
<p>　　mode=&#8221;InProc&#8221;表示：在本地储存会话状态（你也可以选择储存在远程服务器或SAL服务器中或不启用会话状态）</p>
<p>　　cookieless=&#8221;true&#8221;表示：如果用户浏览器不支持Cookie时启用会话状态(默认为False）</p>
<p>　　timeout=&#8221;20&#8243;表示：会话可以处于空闲状态的分钟数</p>
<p>　　8、&lt;trace&gt;</p>
<p>　　作用：配置 ASP.NET 跟踪服务，主要用来程序测试判断哪里出错。</p>
<p>　　示例：以下为Web.config中的默认配置：</p>
<p>&lt;trace enabled=&#8221;false&#8221; requestLimit=&#8221;10&#8243; pageOutput=&#8221;false&#8221; traceMode=&#8221;SortByTime&#8221; localOnly=&#8221;true&#8221; /&gt;</p>
<p>　　注：</p>
<p>　　enabled=&#8221;false&#8221;表示不启用跟踪；requestLimit=&#8221;10&#8243;表示指定在服务器上存储的跟踪请求的数目</p>
<p>　　pageOutput=&#8221;false&#8221;表示只能通过跟踪实用工具访问跟踪输出；</p>
<p>　　traceMode=&#8221;SortByTime&#8221;表示以处理跟踪的顺序来显示跟踪信息</p>
<p>　　localOnly=&#8221;true&#8221; 表示跟踪查看器 (trace.axd) 只用于宿主 Web 服务器</p>
<p>　　三、自定义Web.config文件配置节</p>
<p>　　自定义Web.config文件配置节过程分为两步。</p>
<p>　　一是在在配置文件顶部 &lt;configSections&gt; 和 &lt;/configSections&gt;标记之间声明配置节的名称和处理该节中配置数据的 .NET Framework 类的名称。</p>
<p>　　二是在 &lt;configSections&gt; 区域之后为声明的节做实际的配置设置。</p>
<p>　　示例：创建一个节存储数据库连接字符串</p>
<p>&lt;configuration&gt;<br />
　&lt;configSections&gt;<br />
　&lt;section name=&#8221;appSettings&#8221; type=&#8221;System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&#8243;/&gt;<br />
&lt;/configSections&gt;</p>
<p>　&lt;appSettings&gt;<br />
　　&lt;add key=&#8221;scon&#8221; value=&#8221;server=a;database=northwind;uid=sa;pwd=123&#8243;/&gt;<br />
　&lt;/appSettings&gt;</p>
<p>　&lt;system.web&gt;<br />
　　&#8230;&#8230;<br />
　&lt;/system.web&gt;<br />
&lt;/configuration&gt;  </p>
<p>　　四、访问Web.config文件</p>
<p>　　你可以通过使用ConfigurationSettings.AppSettings 静态字符串集合来访问 Web.config 文件示例：获取上面例子中建立的连接字符串。</p>
<p>Dim sconstr As String = ConfigurationSettings.AppSettings(&#8220;SconStr&#8221;)<br />
Dim scon = New SqlConnection(sconstr)</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.kaixinbc.com%2F2010%2F01%2Fasp-net-webconfig.html&title=%E8%AE%A4%E8%AF%86ASP.NET%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6Web.config" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kaixinbc.com/2010/01/asp-net-webconfig.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp.net中防止用户多次登录的方法</title>
		<link>http://www.kaixinbc.com/2010/01/asp-net-user.html</link>
		<comments>http://www.kaixinbc.com/2010/01/asp-net-user.html#comments</comments>
		<pubDate>Tue, 26 Jan 2010 01:50:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[开源技术]]></category>

		<guid isPermaLink="false">http://www.kaixinbc.com/?p=96</guid>
		<description><![CDATA[在web开发时，有的系统要求同一个用户在同一时间只能登录一次，也就是如果一个用户已经登录了，在退出之前如果再次登录的话需要报错。
常见的处理方法是，在用户登录时，判断此用户是否已经在Application中存在，如果存在就报错，不存在的话就加到Application中(Application是所有Session共有的，整个web应用程序唯一的一个对象)：
string strUserId = txtUser.Text;
ArrayList list = Application.Get(&#8220;GLOBAL_USER_LIST&#8221;) as ArrayList;
if (list == null)
{
list = new ArrayList();
}
for (int i = 0; i &#60; list.Count; i++)
{
if (strUserId == (list[i] as string))
{
//已经登录了，提示错误信息
lblError.Text = &#8221;此用户已经登录&#8221;;
return;
}
}
list.Add(strUserId);
Application.Add(&#8220;GLOBAL_USER_LIST&#8221;, list);
当然这里使用Cache等保存也可以。
接下来就是要在用户退出的时候将此用户从Application中去除，我们可以在Global.asax的Session_End事件中处理：
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时，才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer，则不会引发该事件。
string strUserId = Session["SESSION_USER"] as string;
ArrayList list = Application.Get(&#8220;GLOBAL_USER_LIST&#8221;) as ArrayList;
if (strUserId != null &#38;&#38; list != null)
{
list.Remove(strUserId);
Application.Add(&#8220;GLOBAL_USER_LIST&#8221;, list);
}
}
这些都没有问题，有问题的就是当用户直接点浏览器右上角的关闭按钮时就有问题了。因为直接关闭的话，并不会立即触发Session过期事件，也就是关闭浏览器后再来登录就登不进去了。
这里有两种处理方式：
1、使用Javaｓｃｒｉｐｔ方式
在每一个页面中加入一段javaｓｃｒｉｐｔ代码：
function window.onbeforeunload()
{
if (event.clientX&#62;document.body.clientWidth &#38;&#38; event.clientY&#60;0&#124;&#124;event.altKey){
window.open(&#8220;logout.aspx&#8221;);
}
}
由于onbeforeunload方法在浏览器关闭、刷新、页面调转等情况下都会被执行，所以需要判断是点击了关闭按钮或是按下Alt+F4时才执行真正的关闭操作。
然后在logout.aspx的Page_Load中写和Session_End相同的方法，同时在logout.aspx中加入事件：onload=&#8221;javaｓｃｒｉｐｔ:window.close()&#8221;
但是这样还是有问题，javaｓｃｒｉｐｔ在不同的浏览器中可能有不同的行为，还有就是当通过文件-&#62;关闭时没有判断到。
2、使用xmlhttp方法(这种方法测试下来没有问题)
在每个页面中加入如下的javaｓｃｒｉｐｔ(这些javaｓｃｒｉｐｔ也可以写在共通里，每个页面引入就可以了)
var x=0;
function myRefresh()
{
var httpRequest = new ActiveXObject(&#8220;microsoft.xmlhttp&#8221;);
httpRequest.open(&#8220;GET&#8221;, &#8221;test.aspx&#8221;, false);
httpRequest.send(null);
x++;
if(x&#60;60) //60次，也就是Session真正的过期时间是30分钟
{
setTimeout(&#8220;myRefresh()&#8221;,30*1000); //30秒
}
}
myRefresh();
在web.config中设置
&#60;sessionState mode=&#8221;InProc&#8221; timeout=&#8221;1&#8243;&#62;&#60;/sessionState&#62;
test.aspx页面就是一个空页面，只不过需要在Page_Load中加入：
Response.Expires = -1;
保证不使用缓存，每次都能调用到这个页面。
原理就是：设置Session的过期时间是一分钟，然后在每个页面上定时每30秒连接一次测试页面，保持Session有效，总共连60次，也就是30分钟。如果30分钟后用户还没有操作，Session就会过期。当然，如果用户直接关闭浏览器，那么一分钟后Session也会过期。这样就可以满足要求了。
]]></description>
			<content:encoded><![CDATA[<p>在web开发时，有的系统要求同一个用户在同一时间只能登录一次，也就是如果一个用户已经登录了，在退出之前如果再次登录的话需要报错。</p>
<p>常见的处理方法是，在用户登录时，判断此用户是否已经在Application中存在，如果存在就报错，不存在的话就加到Application中(Application是所有Session共有的，整个web应用程序唯一的一个对象)：</p>
<p>string strUserId = txtUser.Text;</p>
<p>ArrayList list = Application.Get(&#8220;GLOBAL_USER_LIST&#8221;) as ArrayList;</p>
<p>if (list == null)</p>
<p>{</p>
<p>list = new ArrayList();</p>
<p>}</p>
<p>for (int i = 0; i &lt; list.Count; i++)</p>
<p>{</p>
<p>if (strUserId == (list[i] as string))</p>
<p>{</p>
<p>//已经登录了，提示错误信息</p>
<p>lblError.Text = &#8221;此用户已经登录&#8221;;</p>
<p>return;</p>
<p>}</p>
<p>}</p>
<p>list.Add(strUserId);</p>
<p>Application.Add(&#8220;GLOBAL_USER_LIST&#8221;, list);</p>
<p>当然这里使用Cache等保存也可以。</p>
<p>接下来就是要在用户退出的时候将此用户从Application中去除，我们可以在Global.asax的Session_End事件中处理：</p>
<p>void Session_End(object sender, EventArgs e)</p>
<p>{</p>
<p>// 在会话结束时运行的代码。</p>
<p>// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为</p>
<p>// InProc 时，才会引发 Session_End 事件。如果会话模式设置为 StateServer</p>
<p>// 或 SQLServer，则不会引发该事件。</p>
<p>string strUserId = Session["SESSION_USER"] as string;</p>
<p>ArrayList list = Application.Get(&#8220;GLOBAL_USER_LIST&#8221;) as ArrayList;</p>
<p>if (strUserId != null &amp;&amp; list != null)</p>
<p>{</p>
<p>list.Remove(strUserId);</p>
<p>Application.Add(&#8220;GLOBAL_USER_LIST&#8221;, list);</p>
<p>}</p>
<p>}</p>
<p>这些都没有问题，有问题的就是当用户直接点浏览器右上角的关闭按钮时就有问题了。因为直接关闭的话，并不会立即触发Session过期事件，也就是关闭浏览器后再来登录就登不进去了。</p>
<p>这里有两种处理方式：</p>
<p>1、使用Javaｓｃｒｉｐｔ方式</p>
<p>在每一个页面中加入一段javaｓｃｒｉｐｔ代码：</p>
<p>function window.onbeforeunload()</p>
<p>{</p>
<p>if (event.clientX&gt;document.body.clientWidth &amp;&amp; event.clientY&lt;0||event.altKey){</p>
<p>window.open(&#8220;logout.aspx&#8221;);</p>
<p>}</p>
<p>}</p>
<p>由于onbeforeunload方法在浏览器关闭、刷新、页面调转等情况下都会被执行，所以需要判断是点击了关闭按钮或是按下Alt+F4时才执行真正的关闭操作。</p>
<p>然后在logout.aspx的Page_Load中写和Session_End相同的方法，同时在logout.aspx中加入事件：onload=&#8221;javaｓｃｒｉｐｔ:window.close()&#8221;</p>
<p>但是这样还是有问题，javaｓｃｒｉｐｔ在不同的浏览器中可能有不同的行为，还有就是当通过文件-&gt;关闭时没有判断到。</p>
<p>2、使用xmlhttp方法(这种方法测试下来没有问题)</p>
<p>在每个页面中加入如下的javaｓｃｒｉｐｔ(这些javaｓｃｒｉｐｔ也可以写在共通里，每个页面引入就可以了)</p>
<p>var x=0;</p>
<p>function myRefresh()</p>
<p>{</p>
<p>var httpRequest = new ActiveXObject(&#8220;microsoft.xmlhttp&#8221;);</p>
<p>httpRequest.open(&#8220;GET&#8221;, &#8221;test.aspx&#8221;, false);</p>
<p>httpRequest.send(null);</p>
<p>x++;</p>
<p>if(x&lt;60) //60次，也就是Session真正的过期时间是30分钟</p>
<p>{</p>
<p>setTimeout(&#8220;myRefresh()&#8221;,30*1000); //30秒</p>
<p>}</p>
<p>}</p>
<p>myRefresh();</p>
<p>在web.config中设置</p>
<p>&lt;sessionState mode=&#8221;InProc&#8221; timeout=&#8221;1&#8243;&gt;&lt;/sessionState&gt;</p>
<p>test.aspx页面就是一个空页面，只不过需要在Page_Load中加入：</p>
<p>Response.Expires = -1;</p>
<p>保证不使用缓存，每次都能调用到这个页面。</p>
<p>原理就是：设置Session的过期时间是一分钟，然后在每个页面上定时每30秒连接一次测试页面，保持Session有效，总共连60次，也就是30分钟。如果30分钟后用户还没有操作，Session就会过期。当然，如果用户直接关闭浏览器，那么一分钟后Session也会过期。这样就可以满足要求了。</p>
<p><a href="http://17fav.com/?url=http%3A%2F%2Fwww.kaixinbc.com%2F2010%2F01%2Fasp-net-user.html&title=Asp.net%E4%B8%AD%E9%98%B2%E6%AD%A2%E7%94%A8%E6%88%B7%E5%A4%9A%E6%AC%A1%E7%99%BB%E5%BD%95%E7%9A%84%E6%96%B9%E6%B3%95" title="用 17fav 收藏和分享本文"><img src="http://17fav.com/i/bookmark.gif" alt="17fav 收藏本文" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.kaixinbc.com/2010/01/asp-net-user.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
