﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;span class="style11"&gt;★33°空间‰&lt;/span&gt;-文章分类-ASP.NET</title><link>http://www.blogjava.net/yeiwei/category/15474.html</link><description> &lt;span class="style14"&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;----气度影响格局-性格决定命运&lt;br&gt;
 &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;----智力比知识重要，素质比智力重要，觉悟比素质更重要 &lt;/span&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 08:10:33 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 08:10:33 GMT</pubDate><ttl>60</ttl><item><title>c#.net常用的小函数参考</title><link>http://www.blogjava.net/yeiwei/articles/72573.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Thu, 28 Sep 2006 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/articles/72573.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/72573.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/articles/72573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/72573.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/72573.html</trackback:ping><description><![CDATA[<p>
				<font size="1">c#.net常用的小函数和方法集 </font>
		</p>
		<p>
				<br />
				<font size="1">1、DateTime   数字型  <br />       System.DateTime currentTime=new System.DateTime();  <br />  1.1 取当前年月日时分秒  <br />       currentTime=System.DateTime.Now;  <br />  1.2 取当前年  <br />       int 年=currentTime.Year;  <br />  1.3 取当前月  <br />       int 月=currentTime.Month;  <br />  1.4 取当前日  <br />       int 日=currentTime.Day;  <br />  1.5 取当前时  <br />       int 时=currentTime.Hour;  <br />  1.6 取当前分  <br />       int 分=currentTime.Minute;  <br />  1.7 取当前秒  <br />       int 秒=currentTime.Second;  <br />  1.8 取当前毫秒  <br />    int 毫秒=currentTime.Millisecond;  <br />    （变量可用中文）  </font>
		</p>
		<p>
				<font size="1">2、Int32.Parse(变量)            Int32.Parse("常量")  <br />   字符型转换 转为32位数字型  </font>
		</p>
		<p>
				<font size="1">3、  变量.ToString()       <br />   字符型转换 转为字符串  <br />   12345.ToString("n");        //生成   12,345.00  <br />   12345.ToString("C");        //生成 ￥12,345.00  <br />   12345.ToString("e");        //生成 1.234500e+004  <br />   12345.ToString("f4");        //生成 12345.0000  <br />   12345.ToString("x");         //生成 3039  (16进制)  <br />   12345.ToString("p");         //生成 1,234,500.00%  </font>
		</p>
		<p>
				<br />
				<font size="1">4、变量.Length  数字型  <br />   取字串长度：  <br />      如： string str="中国";  <br />           int Len = str.Length ;    //Len是自定义变量， str是求测的字串的变量名  </font>
		</p>
		<p>
				<font size="1">5、System.Text.Encoding.Default.GetBytes(变量)  <br />   字码转换 转为比特码  <br />      如：byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);  <br />   然后可得到比特长度：  <br />      len = bytStr.Length;  </font>
		</p>
		<p>
				<font size="1">6、System.Text.StringBuilder("")  <br />    字符串相加，（+号是不是也一样？）  <br />    如：System.Text.StringBuilder sb = new System.Text.StringBuilder("");  <br />       sb.Append("中华");  <br />       sb.Append("人民");  <br />       sb.Append("共和国");  </font>
		</p>
		<p>
				<font size="1">7、变量.Substring(参数1,参数2);  <br />    截取字串的一部分，参数1为左起始位数，参数2为截取几位。  <br />    如：string s1 = str.Substring(0,2);  </font>
		</p>
		<p>
				<font size="1">8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();  <br />    取远程用户IP地址  </font>
		</p>
		<p>
				<font size="1">9、穿过代理服务器取远程用户真实IP地址：  <br />   if(Request.ServerVariables["HTTP_VIA"]!=null){  <br />      string  user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();  <br />     }else{  <br />      string  user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();  <br />    }  <br />      <br />10、  Session["变量"];    <br />      存取Session值；  <br />      如，赋值：  Session["username"]="小布什";  </font>
		</p>
		<p>
				<font size="1">          取值：  Object objName=Session["username"];  <br />                  String strName=objName.ToString();  <br />          清空：  Session.RemoveAll();  </font>
		</p>
		<p>
				<font size="1">11、String str=Request.QueryString["变量"];  <br />      用超链接传送变量。  <br />       如在任一页中建超链接:&lt;a href=Edit.aspx?fbid=23&gt;点击&lt;/a&gt;  <br />       在Edit.aspx页中取值：String str=Request.QueryString["fdid"];  </font>
		</p>
		<p>
				<font size="1">12、DOC对象.CreateElement("新建节点名");  <br />      创建XML文档新节点  </font>
		</p>
		<p>
				<font size="1">13、父节点.AppendChild(子节点)；  <br />      将新建的子节点加到XML文档父节点下  </font>
		</p>
		<p>
				<font size="1">14、 父节点.RemoveChild(节点);  <br />       删除节点  </font>
		</p>
		<p>
				<font size="1">15、Response  <br />    Response.Write("字串")；  <br />    Response.Write(变量)；  <br />       向页面输出。  </font>
		</p>
		<p>
				<font size="1">    Response.Redirect("URL地址"）；  <br />       跳转到URL指定的页面  </font>
		</p>
		<p>
				<font size="1">16、char.IsWhiteSpce(字串变量，位数)——逻辑型  <br />    查指定位置是否空字符；  <br />    如：  <br />    string str="中国  人民";  <br />    Response.Write(char.IsWhiteSpace(str,2)); //结果为：True, 第一个字符是0位，2是第三个字符。  </font>
		</p>
		<p>
				<font size="1">17、char.IsPunctuation('字符')  --逻辑型  <br />    查字符是否是标点符号  <br />   如：Response.Write(char.IsPunctuation('A'));   //返回：False  </font>
		</p>
		<p>
				<font size="1">18、(int)'字符'  <br />    把字符转为数字，查代码点，注意是单引号。  <br />    如：  <br />    Response.Write((int)'中');   //结果为中字的代码：20013  </font>
		</p>
		<p>
				<font size="1">19、(char)代码  <br />    把数字转为字符，查代码代表的字符。  <br />   如：  <br />   Response.Write((char)22269);   //返回“国”字。  <br />     <br />20、 Trim()  <br />     清除字串前后空格  </font>
		</p>
		<p>
				<font size="1">21 、字串变量.Replace("子字串","替换为")  <br />     字串替换  <br />     如：  <br />     string str="中国";  <br />     str=str.Replace("国","央");  //将国字换为央字  <br />     Response.Write(str);     //输出结果为“中央”  </font>
		</p>
		<p>
				<font size="1">     再如：（这个非常实用）  </font>
		</p>
		<p>
				<font size="1">       string str="这是&lt;script&gt;脚本";  <br />       str=str.Replace("&lt;","&lt;font&gt;&lt;&lt;/font&gt;");  //将左尖括号替换为&lt;font&gt; 与 &lt; 与 &lt;/font&gt; （或换为&amp;lt，但估计经XML存诸后，再提出仍会还原）  <br />       Response.Write(str); //显示为：“这是&lt;script&gt;脚本”  </font>
		</p>
		<p>
				<font size="1">      如果不替换，&lt;script&gt;将不显示，如果是一段脚本，将运行；而替换后，脚本将不运行。  <br />      这段代码的价值在于：你可以让一个文本中的所有HTML标签失效，全部显示出来，保护你的具有交互性的站点。  <br />     具体实现：将你的表单提交按钮脚本加上下面代码：  <br />     string strSubmit=label1.Text;   //label1是你让用户提交数据的控件ID。  <br />     strSubmit=strSubmit.Replace("&lt;","&lt;font&gt;&lt;&lt;/font&gt;");   <br />     然后保存或输出strSubmit。  <br />     用此方法还可以简单实现UBB代码。  </font>
		</p>
		<p>
				<font size="1">22、Math.Max(i,j)  <br />    取i与j中的最大值  <br />    如 int x=Math.Max(5,10);  // x将取值 10   </font>
		</p><img src ="http://www.blogjava.net/yeiwei/aggbug/72573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-09-28 14:21 <a href="http://www.blogjava.net/yeiwei/articles/72573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET配置文件Web.config </title><link>http://www.blogjava.net/yeiwei/articles/70796.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 20 Sep 2006 06:35:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/articles/70796.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/70796.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/articles/70796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/70796.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/70796.html</trackback:ping><description><![CDATA[
		<font size="1">　一、认识Web.config文件<br /><br />　　Web.config文件是一个XML文本文件，它用来储存 ASP.NET Web 应用程序的配置信息（如最常用的设置ASP.NET Web 应用程序的身份验证方式），它可以出现在应用程序的每一个目录中。当你通过VB.NET新建一个Web应用程序后，默认情况下会在根目录自动创建一个默认的<br />Web.config文件，包括默认的配置设置，所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置，你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息，也可以重写或修改父目录中定义的设置。<br /><br />　　在运行时对Web.config文件的修改不需要重启服务就可以生效（注：＜processModel＞ 节例外）。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。 <br /><br />　　二、web.config配置文件（默认的配置设置）以下所有的代码都应该位于<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">＜configuration＞<br />＜system.web＞</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="1">　　和<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">＜/system.web＞<br />＜/configuration＞</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="1">　　之间，出于学习的目的下面的示例都省略了这段XML标记<br /><br />　　1、＜authentication＞ 节<br /><br />　　作用：配置 ASP.NET 身份验证支持（为Windows、Forms、PassPort、None四种）。该元素只能在计算机、站点或应用程序级别声明。＜authentication＞ 元素必需与＜authorization＞ 节配合使用。<br /><br />　　示例：<br /><br />　　以下示例为基于窗体（Forms）的身份验证配置站点，当没有登陆的用户访问需要身份验证的网页，网页自动跳转到登陆网页。<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">＜authentication mode="Forms" ＞ <br />＜forms loginUrl="logon.aspx" name=".FormsAuthCookie"/＞<br /><br />＜/authentication＞</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="1">　　其中元素loginUrl表示登陆网页的名称，name表示Cookie名称<br /><br />　　2、＜authorization＞ 节<br /><br />　　作用：控制对 URL 资源的客户端访问（如允许匿名用户访问）。此元素可以在任何级别（计算机、站点、应用程序、子目录或页）上声明。必需与＜authentication＞ 节配合使用。<br /><br />　　示例：以下示例禁止匿名用户的访问<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">＜authorization＞<br />　＜deny users="?"/＞<br />＜/authorization＞</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="1">　　注：你可以使用user.identity.name来获取已经过验证的当前的用户名；可以使用<br />web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的实例请参考:<br /><br />　　Forms验证 </font>
		<a href="http://www.fanvb.net/websample/dataauth.aspx">
				<font color="#000000" size="1">http://www.fanvb.net/websample/dataauth.aspx</font>
		</a>
		<br />
		<br />
		<font size="1">　　3、＜compilation＞节<br /><br />　　作用：配置 ASP.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为True（Web.config文件中有详细说明，此处省略示例）<br /><br />　　4、＜customErrors＞ <br /><br />　　作用：为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XML Web services 中发生的错误。<br /><br />　　示例：当发生错误时，将网页跳转到自定义的错误页面。<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">＜customErrors defaultRedirect="ErrorPage.aspx" mode="RemoteOnly"＞<br />＜/customErrors＞</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="1">　　其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示：对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。<br /><br />　　5、＜httpRuntime＞节<br /><br />　　作用：配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。<br /><br />　　示例：控制用户上传文件最大为4M，最长时间为60秒，最多请求数为100<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">＜httpRuntime maxRequestLength="4096" executionTimeout="60" appRequestQueueLimit="100"/＞</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="1">　　6、 ＜pages＞<br /><br />　　作用：标识特定于页的配置设置（如是否启用会话状态、视图状态，是否检测用户的输入等）。＜pages＞可以在计算机、站点、应用程序和子目录级别声明。<br /><br />　　示例：不检测用户在浏览器输入的内容中是否存在潜在的危险数据（注：该项默认是检测，如果你使用了不检测，一要对用户的输入进行编码或验证)，在从客户端回发页时将检查加密的视图状态，以验证视图状态是否已在客户端被篡改。(注：该项默认是不验证）<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">＜pages buffer="true" enableViewStateMac="true" validateRequest="false"/＞</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="1">　　7、＜sessionState＞<br /><br />　　作用：为当前应用程序配置会话状态设置（如设置是否启用会话状态，会话状态保存位置）。<br /><br />　　示例：<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">＜sessionState mode="InProc" cookieless="true" timeout="20"/＞<br />＜/sessionState＞</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="1">　　注：<br /><br />　　mode="InProc"表示：在本地储存会话状态（你也可以选择储存在远程服务器或SAL服务器中或不启用会话状态）<br /><br />　　cookieless="true"表示：如果用户浏览器不支持Cookie时启用会话状态(默认为False）<br /><br />　　timeout="20"表示：会话可以处于空闲状态的分钟数<br /><br />　　8、＜trace＞<br /><br />　　作用：配置 ASP.NET 跟踪服务，主要用来程序测试判断哪里出错。<br /><br />　　示例：以下为Web.config中的默认配置：<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">＜trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" /＞</font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="1">　　注：<br /><br />　　enabled="false"表示不启用跟踪；requestLimit="10"表示指定在服务器上存储的跟踪请求的数目 <br /><br />　　pageOutput="false"表示只能通过跟踪实用工具访问跟踪输出；<br /><br />　　traceMode="SortByTime"表示以处理跟踪的顺序来显示跟踪信息<br /><br />　　localOnly="true" 表示跟踪查看器 (trace.axd) 只用于宿主 Web 服务器<br /><br />　　三、自定义Web.config文件配置节<br /><br />　　自定义Web.config文件配置节过程分为两步。<br /><br />　　一是在在配置文件顶部 ＜configSections＞ 和 ＜/configSections＞标记之间声明配置节的名称和处理该节中配置数据的 .NET Framework 类的名称。<br /><br />　　二是在 ＜configSections＞ 区域之后为声明的节做实际的配置设置。<br /><br />　　示例：创建一个节存储数据库连接字符串<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">＜configuration＞<br />　＜configSections＞<br />　＜section name="appSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/＞<br />＜/configSections＞<br /><br />　＜appSettings＞<br />　　＜add key="scon" value="server=a;database=northwind;uid=sa;pwd=123"/＞<br />　＜/appSettings＞<br /><br />　＜system.web＞<br />　　......<br />　＜/system.web＞<br />＜/configuration＞ </font>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<font size="1">　　四、访问Web.config文件<br /><br />　　你可以通过使用ConfigurationSettings.AppSettings 静态字符串集合来访问 Web.config 文件示例：获取上面例子中建立的连接字符串。<br /><br /></font>
		<table bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
				<tbody>
						<tr>
								<td>
										<font size="1">Dim sconstr As String = ConfigurationSettings.AppSettings("SconStr")<br />Dim scon = New SqlConnection(sconstr)</font>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/yeiwei/aggbug/70796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-09-20 14:35 <a href="http://www.blogjava.net/yeiwei/articles/70796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET 2.0, 想说爱你不容易—在ASP.NET 2.0中开发通配符映射应用程序的一些问题 </title><link>http://www.blogjava.net/yeiwei/articles/70773.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 20 Sep 2006 05:36:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/articles/70773.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/70773.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/articles/70773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/70773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/70773.html</trackback:ping><description><![CDATA[
		<font size="1"> 文章的题目想了好几个，比如：“在ASP.NET 2.0中开发通配符映射应用程序的一些问题”，后来考虑到为了吸引眼球:)，并为了好记，选了这个有点俗的题目。 <br />     本文主要通过分析在ASP.NET 2.0中开发ASP.NET通配符映射应用程序遇到的一些问题，来说明ASP.NET 2.0中页面编译模型的不足之处。文章中如果有不妥之处，欢迎您指出。 <br />     这里所说的ASP.NET通配符映射应用程序是指在IIS中将所有请求转发至ASP.NET 2.0运行时处理(对于IIS 5.0，就是建立.*到aspnet_isapi.dll的映射)，在程序中通过实现System.Web.IhttpHandlerFactory接口来处理所有请求，实现System.Web.IhttpHandlerFactory的类就相当于一个前端控制器。典型应用就是.Text及基于.Text开发的博客园Blog软件。 <br />     在ASP.NET 1.1中，实现通配符映射应用程序大家可能比较清楚，主要是两点： <br />     1、 实现System.Web.IhttpHandlerFactory接口，在GetHandler(HttpContext context, string requestType, string url, string path)中根据请求的url，基于一些规则，找到实际访问的页面文件，然后调用PageParser.GetCompiledPageInstance对页面进行编译并生成相应的实例处理请求。这样做的好处是：你可以使用任意的url地址，不必关心是否存在对应的页面文件，而且可以方便地控制对Web服务器上资源的访问。 <br />     2、 在web.config中加上: </font>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="1">
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">httpHandlers</span>
						<span style="COLOR: #0000ff">&gt;</span>
				</font>
				<font size="1">
						<span style="COLOR: #000000">
								<br />    </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">add </span>
						<span style="COLOR: #ff0000">path</span>
						<span style="COLOR: #0000ff">="*"</span>
						<span style="COLOR: #ff0000"> verb</span>
						<span style="COLOR: #0000ff">="*"</span>
						<span style="COLOR: #ff0000"> type</span>
						<span style="COLOR: #0000ff">="Dottext.Common.UrlManager.UrlReWriteHandlerFactory,Dottext.Common"</span>
						<span style="COLOR: #ff0000"> validate</span>
						<span style="COLOR: #0000ff">="false"</span>
						<span style="COLOR: #ff0000"> </span>
						<span style="COLOR: #0000ff">/&gt;</span>
				</font>
				<font size="1">
						<span style="COLOR: #000000">
								<br />
						</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">httpHandlers</span>
						<span style="COLOR: #0000ff">&gt;</span>
				</font>
		</div>
		<p>
				<font size="1">     ASP.NET 2.0中新的页面编译模型给实现通配符映射应用程序带来意想不到的问题，下面我以博客园Blog软件为例与大家一些探讨这些问题。 <br />     在博客园Blog软件中，实现IhttpHandlerFactory接口的是Dottext.Common.UrlManager. UrlReWriteHandlerFactory，不改变在ASP.NET 1.1中实现的UrlReWriteHandlerFactory代码，直接在ASP.NET 2.0中编译并运行，当程序运行在IIS根目录下，就会在执行PageParser.GetCompiledPageInstance时出现“Object reference not set to an instance of an object”异常(运行在虚拟目录中不会出现这个问题)。这个问题是ASP.NET 2.0中的一个小Bug，之前我写的</font>
				<a href="http://dudu.cnblogs.com/archive/2006/03/07/344351.html">
						<font size="1">PageParser.GetCompiledPageInstance中的一个Bug及解决方法</font>
				</a>
				<font size="1">对这个问题进行了一些分析，这个问题可以通过在PageParser.GetCompiledPageInstance之前调用context.RewritePath（"~/default.aspx")解决。 <br />      接着进行访问个人Blog主页的测试，比如：</font>
				<a href="http://www.cnblogs.com/dudu">
						<font size="1">http://www.cnblogs.com/dudu</font>
				</a>
				<font size="1">，访问时出现错误： </font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="1">
						<span style="COLOR: #000000">“There is no build provider registered for the extension ''. You can register one in the </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">compilation</span>
						<span style="COLOR: #0000ff">&gt;&lt;</span>
						<span style="COLOR: #800000">buildProviders</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000"> section in machine.config or web.config. Make sure is has a BuildProviderAppliesToAttribute attribute which includes the value 'Web' or 'All'.”</span>
				</font>
		</div>
		<p>
				<font size="1">     在ASP.NET 2.0中，当我们第一次访问一个页面时，必不少的两个过程是：1、页面编译 2、创建编译后的页面代码的实例。页面编译是根据所访问的url地址中的扩展名找到匹配的Build Provider对页面进行编译。这里出现的问题是由于ASP.NET 2.0运行时没找到相应的Build Provider，对</font>
				<a href="http://www.cnblogs.com/dudu">
						<font size="1">http://www.cnblogs.com/dudu</font>
				</a>
				<font size="1">这样地址，由于使用了通配符映射，在ASP.NET 2.0运行时处理时，得到的扩展名是空(如果没有使用通配符映射，IIS会自动将地址改为：</font>
				<a href="http://www.cnblogs.com/dudu/default.aspx">
						<font size="1">http://www.cnblogs.com/dudu/default.aspx</font>
				</a>
				<font size="1">)。ASP.NET 2.0在这里的设计不足之处是没有考虑这种情况，无法通过在web.config中进行相应的配置来解决这个问题。如果能提供下面的配置，这个问题就可以轻松解决： </font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="1">
						<img height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">buildProviders </span>
						<span style="COLOR: #0000ff">&gt;</span>
				</font>
				<font size="1">
						<span style="COLOR: #000000">
								<br />
								<img height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />        </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">add  </span>
						<span style="COLOR: #ff0000">extension</span>
						<span style="COLOR: #0000ff">=".*"</span>
						<span style="COLOR: #ff0000"> type</span>
						<span style="COLOR: #0000ff">="System.Web.Compilation.PageBuildProvider"</span>
						<span style="COLOR: #0000ff">/&gt;</span>
				</font>
				<font size="1">
						<span style="COLOR: #000000">
								<br />
								<img height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />
						</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">buildProviders</span>
						<span style="COLOR: #0000ff">&gt;</span>
				</font>
		</div>
		<p>
				<font size="1">     对于这个问题，我的解决方法是在PageParser.GetCompiledPageInstance之前对url进行处理，在url中加上缺省文件，比如：default.aspx。如果你想使用其他的扩展名，比如：.html，需要在web.config中加上:</font>
		</p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="1">
						<img height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">buildProviders </span>
						<span style="COLOR: #0000ff">&gt;</span>
				</font>
				<font size="1">
						<span style="COLOR: #000000">
								<br />
								<img height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />        </span>
						<span style="COLOR: #0000ff">&lt;</span>
						<span style="COLOR: #800000">add  </span>
						<span style="COLOR: #ff0000">extension</span>
						<span style="COLOR: #0000ff">=".html"</span>
						<span style="COLOR: #ff0000"> type</span>
						<span style="COLOR: #0000ff">="System.Web.Compilation.PageBuildProvider"</span>
						<span style="COLOR: #0000ff">/&gt;</span>
				</font>
				<font size="1">
						<span style="COLOR: #000000">
								<br />
								<img height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" width="11" align="top" />
						</span>
						<span style="COLOR: #0000ff">&lt;/</span>
						<span style="COLOR: #800000">buildProviders</span>
						<span style="COLOR: #0000ff">&gt;</span>
						<span style="COLOR: #000000">。</span>
				</font>
		</div>
		<p>
				<font size="1">     这里还有一个小bug，在上面的错误信息“Make sure is has a BuildProvider AppliesToAttribute attribute which includes the value 'Web' or 'All'.”提示需要设置AppliesToAttribute属性，实际上web.config中并不支持这样的属性，可能是正式版之前的ASP.NET 2.0支持过这个属性，后来去掉后，错误提示信息并没有修改。 <br />     解决了上面的两个问题，原以为通配符映射应用程序可以在ASP.NET 2.0中正常运行了，我在本机上测试博客园的程序，页面能正常访问。可是今天凌晨在服务器进上将网站升级到ASP.NET 2.0之后，发现ASP.NET运行时在频繁地编译页面，CPU占用一直100%，编译了一个多小时还在编译，而且编译似乎与访问量有关，访问少的站点页面还能打开，博客园主站由于访问量大，几乎无法访问。问题出在哪？于是我从PageParser.GetCompiledPageInstance的源代码寻找线索，在BuildManager.GetCacheKeyFromVirtualPath中发现可疑之处，BuildManager是根据所请求的虚拟路径创建缓存键，然后根据这个键查找或创建页面编译后的缓存对象。当对一个页面发出请求时，BuildManager会检查缓存，先从内存中检查，如果内存中没有就从缓存文件夹(Temporary ASP.NET Files)中查找，如果找到，就直接创建该类型的实例，不进行动态编译。如果没找到，就进行页面编译工作，而且查找的依据就是根据虚拟路径创建的缓存键。对于通常的页面访问方式，这样处理不会引起问题。但对于通配符映射的情况，就会带来问题。因为通配符映射时，常见情况是不同的url地址访问的却是同一个页面文件。比如博客园中每篇文章地址不同，但访问的却是同样的页面代码，如果按照目前ASP.NET 2.0中的页面编译模型，每篇文章第一次访问都要进行编译，如果博客园中的几十万篇文章被访问，就要进行几十万编译，难怪今天博客园网站升级至ASP.NET 2.0之后，服务器一直忙于编译。 <br />经过测试情况果然这样，当然访问地址：</font>
				<a href="http://www.cnblogs.com/dudu/archive/2006/03/07/345107.html">
						<font size="1">http://www.cnblogs.com/dudu/archive/2006/03/07/345107.html</font>
				</a>
				<a href="http://localhost/dudu/archive/2006/03/06/186.html">
				</a>
				<font size="1">时会在Temporary ASP.NET Files中文件夹编译生成类ASP.dudu_archive_2006_03_07_345107_html，而访问其他文章地时，也根据文章地址生成另外一个类(2006年3月12日修改：对于这个问题，通过传给PageParser.GetCompiledPageInstance一个真实的虚拟地址就能解决问题，比如在博客园程序中，对于上面的地址，改为这样的代码就行了：GetCompiledPageInstance(app+"~/default.aspx", pagepath, context))。</font>
				<font size="1">
						<strike>这样编译效率实在太低了!为什么要根据虚拟路径创建缓键，设计者设计时根本没考虑到通配符映射的问题，真是糟糕的设计！如果按照ASP.NET 1.1那样根据实际访问的页面文件名创建缓存键，就可以轻松地避免这个问题。ASP.NET 2.0新的页面编译模型在这里似乎是一个败笔。更糟糕的是连让开发人员弥补这个Bug的机会都没有，System.Web.Compilation.BuildManager中没有提供一个让开发人员自己设置缓存键的方法或属性。(注：创建缓存键的方法是BuildManager. GetCacheKeyFromVirtualPath(VirtualPath virtualPath, out bool keyFromVPP))。更糟糕的是，System.Web.Compilation中的很多类都是internal，很多类的方法是灰色（Reflector用灰色显示internal static或private，颜色用的不错，让人看了就灰心），想自己调用相应方法进行页面编译几乎是不可能(用反射的方法不知能否调用，还没试过，即使能调用，也要考虑性能上的损失)。难道要自己写System.Web.Compilation中那些类去处理页面编译？我宁愿选择ASP.NET 1.1，然后等ASP.NET 2.0 SP1，SP1解决不了，等SP2......希望不要等到ASP.NET 3.0。 <br /></strike>      也许你想到了在GetHandler(HttpContext context, string requestType, string url, string path)中调用System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath来编译并创建页面的实例。这个方法我也尝试过，答案是不行，还不如PageParser.GetCompiledPageInstance，至少后者能让程序运行起来。使用BuildManager.CreateInstanceFromVirtualPath时，当访问的地址中不带扩展名时就会出现“The resource cannot be found”错误，原因是在GetVPathBuildResultInternal(VirtualPath virtualPath, bool noBuild, bool allowCrossApp, bool allowBuildInPrecompile)中调用了Util.CheckVirtualFileExists(virtualPath)对虚拟路径进行检查，检查时将虚拟路径转换为物理路径，检查当前请求的页面文件是否存在，对于通配符映射应用程序，很多地址是实际上不存在的，所以就出现“The resource cannot be found”错误。而PageParser.GetCompiledPageInstance中通过调用HostingEnvironment.AddVirtualPathToFileMapping避免了这个问题。而这个方法被 <br />Internal保护，在代码中也无法调用。 <br />      我觉得问题的核心是ASP.NET 2.0设计者在设计时没有考虑通配符映射这样的情况。是忽略还是另有考虑，就不得而知了。但ASP.NET 1.1能正确处理这个问题，而ASP.NET 2.0却处理不了，这里很不应该的。使用通配符映射的Web应用程序用户只能望ASP.NET 2.0心叹。最近花了很大精力想把博客园的程序迁移到ASP.NET 2.0，而结果却是无法迁移到ASP.NET 2.0，令人失望! 只能寄希望微软推出相应的补丁。 <br />     还好，使用通配符映射的Web应用程序不是很多，这个问题影响不是很大。 <br /></font>
		</p>
<img src ="http://www.blogjava.net/yeiwei/aggbug/70773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-09-20 13:36 <a href="http://www.blogjava.net/yeiwei/articles/70773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何生成静态页</title><link>http://www.blogjava.net/yeiwei/articles/70772.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 20 Sep 2006 05:35:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/articles/70772.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/70772.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/articles/70772.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/70772.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/70772.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#000000" size="1">方案1：<br />/// &lt;summary&gt;<br />/// 传入URL返回网页的html代码<br />/// &lt;/summary&gt;<br />/// &lt;param name="Url"&gt;URL&lt;/param&gt;<br />/// &lt;returns&gt;&lt;/returns&gt;<br />public static  string getUrltoHtml(string Url)<br />{<br />errorMsg = "";<br />try<br />{<br />System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);<br />// Get the response instance.<br />System.Net.WebResponse wResp =wReq.GetResponse();<br />// Read an HTTP-specific property<br />//if (wResp.GetType() ==HttpWebResponse)<br />//{<br />//DateTime updated  =((System.Net.HttpWebResponse)wResp).LastModified;<br />//}<br />// Get the response stream.<br />System.IO.Stream respStream  = wResp.GetResponseStream();<br />// Dim reader As StreamReader = New StreamReader(respStream)<br />System.IO.StreamReader reader = new System.IO.StreamReader(respStream, System.Text.Encoding.GetEncoding("gb2312"));<br />return  reader.ReadToEnd();</font>
		</p>
		<p>
				<font color="#000000" size="1">}<br />catch(System.Exception ex)<br />{<br />errorMsg = ex.Message ;<br />}<br />return "";<br />}</font>
		</p>
		<p>
				<font color="#000000" size="1">你可以用这个函数获取网页的客户端的html代码，然后保存到.html文件里就可以了。</font>
		</p>
		<p>
				<font color="#000000" size="1">方案2：<br />生成单个的静态页面不是难点，难的是各个静态页面间的关联和链接如何保持完整；<br />特别是在页面频繁更新、修改、或删除的情况下；</font>
		</p>
		<p>
				<font color="#000000" size="1">像阿里巴巴的页面也全部是html的，估计用的是地址映射的功能<br />关于地址映射可参考：</font>
				<a href="http://www.easewe.com/Article/ShowArticle.aspx?article=131">
						<font color="#000000" size="1">http://www.easewe.com/Article/ShowArticle.aspx?article=131</font>
				</a>
		</p>
		<p>
				<font color="#000000" size="1">可以看看这个页面，分析一下他的“竞价倒计时”功能<br /></font>
				<a href="http://info.china.alibaba.com/news/subject/v1-s5011580.html?head=top4&amp;Bidding=home5">
						<font color="#000000" size="1">http://info.china.alibaba.com/news/subject/v1-s5011580.html?head=top4&amp;Bidding=home5</font>
				</a>
		</p>
		<p>
				<font color="#000000" size="1">ASP.Net生成静态HTML页<br />在Asp中实现的生成静态页用到的FileSystemObject对象!<br />在.Net中涉及此类操作的是System.IO <br />以下是程序代码 注:此代码非原创!参考别人代码</font>
		</p>
		<p>
				<font color="#000000" size="1">  CODE:   <br />//生成HTML页<br />  public static bool WriteFile(string strText,string strContent,string strAuthor) <br />  {<br />   string path = HttpContext.Current.Server.MapPath("/news/");<br />   Encoding code = Encoding.GetEncoding("gb2312");<br />   // 读取模板文件<br />   string temp = HttpContext.Current.Server.MapPath("/news/text.html");<br />   StreamReader sr=null;<br />   StreamWriter sw=null;<br />   string str="";  <br />   try<br />   {<br />    sr = new StreamReader(temp, code);<br />    str = sr.ReadToEnd(); // 读取文件<br />   }<br />   catch(Exception exp)<br />   {<br />    HttpContext.Current.Response.Write(exp.Message);<br />    HttpContext.Current.Response.End();<br />    sr.Close();<br />   }<br />  <br />   <br />   string htmlfilename=DateTime.Now.ToString("yyyyMMddHHmmss")+".html";<br />   // 替换内容<br />   // 这时,模板文件已经读入到名称为str的变量中了<br />   str =str.Replace("ShowArticle",strText); //模板页中的ShowArticle<br />   str = str.Replace("biaoti",strText);<br />   str = str.Replace("content",strContent);<br />   str = str.Replace("author",strAuthor);<br />   // 写文件<br />   try<br />   {<br />    sw = new StreamWriter(path + htmlfilename , false, code);<br />    sw.Write(str);<br />    sw.Flush();<br />   }<br />   catch(Exception ex)<br />   {<br />    HttpContext.Current.Response.Write(ex.Message);<br />    HttpContext.Current.Response.End();<br />   }<br />   finally<br />   {<br />    sw.Close();<br />   }<br />   return true;</font>
		</p>
		<p>
				<font color="#000000" size="1">此函数放在Conn.CS基类中了<br />在添加新闻的代码中引用 注：工程名为Hover</font>
		</p>
		<p>
				<font color="#000000" size="1">    if(Hover.Conn.WriteFilethis.Title.Text.ToString),this.Content.Text.ToString),this.Author.Text.ToString)))<br />    {<br />     Response.Write("添加成功");<br />    }<br />    else<br />    {<br />     Response.Write("生成HTML出错!");<br />    } <br /> </font>
		</p>
		<p>
				<br />
				<font color="#000000" size="1">模板页Text.html代码</font>
		</p>
		<p>
				<br />
				<font color="#000000" size="1">  CODE:   <br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" &gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />  &lt;title&gt;ShowArticle&lt;/title&gt;<br />   &lt;body&gt;<br />biaoti<br />&lt;br/&gt;<br />content&lt;br/&gt;<br />author<br />&lt;/body&gt;<br />&lt;/HTML&gt;<br />biaoti<br />&lt;br/&gt;<br />content&lt;br/&gt;<br />author<br />&lt;/body&gt;<br />&lt;/HTML&gt; <br /> <br />提示添加成功后会出以当前时间为文件名的html文件!上面只是把传递过来的几个参数直接写入了HTML文件中,在实际应用中需要先添加数据库，然后再写入HTML文件</font>
		</p>
		<p>
				<font color="#000000" size="1">方案3：<br />给一个客户端参考的例子（SJ）<br />它的作用在于以客户端的方式获取某个页面的代码，然后可以做为其他用途，本例是直接输出<br />&lt;script&gt;<br />    var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");<br />    oXmlHttp.open("GET","</font>
				<a href="http://www.163.com">
						<font color="#000000" size="1">http://www.163.com</font>
				</a>
				<font color="#000000" size="1">", false);<br />    oXmlHttp.send()<br />    var oStream = new ActiveXObject("ADODB.Stream");<br />    if(oStream == null)<br />        alert("您的机器不支持ADODB.Stream.")<br />    else<br />    {<br />        oStream.Type=1;<br />        oStream.Mode=3;<br />        oStream.Open() ;<br />        oStream.Write(oXmlHttp.responseBody);<br />        oStream.Position= 0;<br />        oStream.Type= 2;<br />        oStream.Charset="gb2312";<br />        var result= oStream.ReadText();<br />        oStream.Close();<br />        oStream = null;<br />  var aa = window.open("","")<br />  document.write(result);<br />        aa.document.write(result);<br />    }<br />&lt;/script&gt;</font>
		</p>
		<p>
				<font color="#000000" size="1">方案4：学csdn一样。用xml保存数据，模版XSL也只有一个文件。<br />使用xml来保存数据，使用xsl来定义模板并且生称数据。可以通过xsl来很方便的在客户端或者服务段显示数据。如果要生成静态叶面那更简单了。去查一下.net的xml类包问题解决。<br />            优点：可以方便快速转换成你想要的格式和内容。<br />            缺点：需要学习更多的内容，不好入门。</font>
		</p>
		<p>
				<font color="#000000" size="1">方案5：<br />思路 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　1. 利用如Dw-Mx这样的工具生成html格式的模板，在需要添加格式的地方加入特殊标记(如$htmlformat$),动态生成文件时利用代码读取此模板，然后获得前台输入的内容，添加到此模板的标记位置中，生成新文件名后写入磁盘，写入后再向数据库中写入相关数据。<br />       2. 使用后台代码硬编码Html文件，可以使用HtmlTextWriter类来写html文件。 <br />优点 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　1. 可以建立非常复杂的页面，利用包含js文件的方法，在js文件内加入document.write()方法可以在所有页面内加入如页面头，广告等内容。 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　2. 静态html文件利用MS Windows2000的Index Server可以建立全文搜索引擎，利用asp.net可以以DataTable的方式得到搜索结果。而Win2000的Index服务无法查找xml文件的内容。如果包括了数据库搜索与Index索引双重查找，那么此搜索功能将非常强大。 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　3. 节省服务器的负荷，请求一个静态的html文件比一个aspx文件服务器资源节省许多。 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　缺点 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　思路二： 如果用硬编码的方式，工作量非常大，需要非常多的html代码。调试困难。而且使用硬编码生成的html样式无法修改，如果网站更换样式，那么必须得重新编码，给后期带来巨大的工作量。 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　因此这里采用的是第一种思路 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　示列代码 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　1.定义(template.htm)html模板页面 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜html＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜head＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜title＞＜/title＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜meta http-equiv="Content-Type" content="text/html; charset=gb2312"＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜/head＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜body ＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜table $htmlformat[0] height="100%" border="0" width="100%" cellpadding="10" cellspacing="0" bgcolor="#eeeeee" style="border:1px solid #000000"＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜tr＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜td width="100%" valign="middle" align="left"＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜span style="color: $htmlformat[1];font-size: $htmlformat[2]"＞$htmlformat[3]＜/span＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜/td＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜/tr＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜/table＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜/body＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　＜/html＞ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　2.asp.net代码： </font>
		</p>
		<p>
				<font color="#000000" size="1">　　//---------------------读html模板页面到stringbuilder对象里---- </font>
		</p>
		<p>
				<font color="#000000" size="1">　　string[] format=new string[4];//定义和htmlyem标记数目一致的数组 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　StringBuilder htmltext=new StringBuilder(); </font>
		</p>
		<p>
				<font color="#000000" size="1">　　try </font>
		</p>
		<p>
				<font color="#000000" size="1">　　{ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　　using (StreamReader sr = new StreamReader("存放模板页面的路径和页面名")) </font>
		</p>
		<p>
				<font color="#000000" size="1">　　　{ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　String line; </font>
		</p>
		<p>
				<font color="#000000" size="1">　　while ((line = sr.ReadLine()) != null) </font>
		</p>
		<p>
				<font color="#000000" size="1">　　{ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　　htmltext.Append(line); </font>
		</p>
		<p>
				<font color="#000000" size="1">　　} </font>
		</p>
		<p>
				<font color="#000000" size="1">　　sr.Close(); </font>
		</p>
		<p>
				<font color="#000000" size="1">　　　} </font>
		</p>
		<p>
				<font color="#000000" size="1">　　} </font>
		</p>
		<p>
				<font color="#000000" size="1">　　catch </font>
		</p>
		<p>
				<font color="#000000" size="1">　　{ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　　Response.Write("＜Script＞alert('读取文件错误')＜/Script＞"); </font>
		</p>
		<p>
				<font color="#000000" size="1">　　} </font>
		</p>
		<p>
				<font color="#000000" size="1">　　//---------------------给标记数组赋值------------ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　format[0]="background="bg.jpg"";//背景图片 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　format[1]= "#990099";//字体颜色 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　format[2]="150px";//字体大小 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　format[3]= "＜marquee＞生成的模板html页面＜/marquee＞";//文字说明 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　//----------替换htm里的标记为你想加的内容 </font>
		</p>
		<p>
				<font color="#000000" size="1">　　for(int i=0;i＜4;i++) </font>
		</p>
		<p>
				<font color="#000000" size="1">　　{ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　　htmltext.Replace("$htmlformat["+i+"]",format[i]); </font>
		</p>
		<p>
				<font color="#000000" size="1">　　} </font>
		</p>
		<p>
				<font color="#000000" size="1">　　//----------生成htm文件------------------―― </font>
		</p>
		<p>
				<font color="#000000" size="1">　　try </font>
		</p>
		<p>
				<font color="#000000" size="1">　　{ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　　using(StreamWriter sw=new StreamWriter("存放路径和页面名",false,System.Text.Encoding.GetEncoding("GB2312"))) </font>
		</p>
		<p>
				<font color="#000000" size="1">　　{ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　　sw.WriteLine(htmltext); </font>
		</p>
		<p>
				<font color="#000000" size="1">　　　sw.Flush(); </font>
		</p>
		<p>
				<font color="#000000" size="1">　　　sw.Close(); </font>
		</p>
		<p>
				<font color="#000000" size="1">　　} </font>
		</p>
		<p>
				<font color="#000000" size="1">　　} </font>
		</p>
		<p>
				<font color="#000000" size="1">　　catch </font>
		</p>
		<p>
				<font color="#000000" size="1">　　{ </font>
		</p>
		<p>
				<font color="#000000" size="1">　　Response.Write ("The file could not be wirte:"); </font>
		</p>
		<p>
				<font color="#000000" size="1">　　} </font>
		</p>
		<p>
				<font color="#000000" size="1">　　小结 <br />　　用此方法可以方便的生成html文件。程序使用了是循环替换，因此对需替换大量元素的模板速度非常快。</font>
		</p>
<img src ="http://www.blogjava.net/yeiwei/aggbug/70772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-09-20 13:35 <a href="http://www.blogjava.net/yeiwei/articles/70772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在.NET 2.0 中发送Email </title><link>http://www.blogjava.net/yeiwei/articles/70762.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 20 Sep 2006 05:07:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/articles/70762.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/70762.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/articles/70762.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/70762.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/70762.html</trackback:ping><description><![CDATA[
		<font size="1">刚刚看到一篇关于在.NET 中发送Email的文章《</font>
		<a href="http://happyhzs2000.cnblogs.com/archive/2006/07/06/444596.html">
				<font color="#002c99" size="1">从asp.net页面发送电子邮件</font>
		</a>
		<font size="1">》看到使用的还是System.Web.Mail命名空间下的类。我们都知道，在.NET 1.1下大部分都是使用这个命名空间下的类来发送邮件的，使用SmtpMail的Send静态方法可以很简单的发送Email，但由于这个类调用的是Windows2000版本以上的操作系统的CDO组件来发送邮件，不管是什么错误都会提示是CDO.Message对象无法访问或其它的CDO.Message异常，我们无法得到很比较详细的异常信息，给我们的调试带来的很大的不便。特别是当我们需要Smtp验证的话，还要给MailMessage添加三个邮件头定义，相对来说还是比较麻烦的。那么在.NET 2.0下，发送Email的功能已经被设计得非常好了，利用System.Net.Mail空间下的类可以让我们很简单地发送各种Email。但是为了兼容原来的版本，所以System.Web.Mail空间并没有被删除，这个空间下的类也都被打上Obsolete标记了，使用.NET 2.0 框架编译的话都会提示推荐使用System.Net.Mail空间的类来代替。 </font>
		<p> </p>
		<p>
				<font size="1">下面我们就来看看需要做哪些事才能发送Email的，在这里我也找到了园子里一篇关于.NET 2.0发送Email的文章《</font>
				<a href="http://yyw84.cnblogs.com/archive/2006/05/17/402381.html">
						<font color="#002c99" size="1">基于 .NET 2.0 System.Net.Mail namespace 的邮件发送组件</font>
				</a>
				<font size="1">》，它涵盖了发送和接收邮件。在本篇里，我们只讨论如何发送的，我感觉它那边好像没有真正用好配置文件。还要自己给SmtpClient指定Stmp帐号的一些信息，事实上我们只需要通过web.config(或app.config)配置一下我们将要使用的Smtp帐号： </font>
		</p>
		<p>
				<font size="1">&lt;configuration&gt; </font>
		</p>
		<p>
				<font size="1">    &lt;system.net&gt; </font>
		</p>
		<p>
				<font size="1">        &lt;mailSettings&gt; </font>
		</p>
		<p>
				<font size="1">            &lt;smtp from="hjf1223@tom.com"&gt; </font>
		</p>
		<p>
				<font size="1">                &lt;network host="smtp.tom.com" password=" " port="25" userName="hjf1223" defaultCredentials="false"/&gt; </font>
		</p>
		<p>
				<font size="1">            &lt;/smtp&gt; </font>
		</p>
		<p>
				<font size="1">        &lt;/mailSettings&gt; </font>
		</p>
		<p>
				<font size="1">    &lt;/system.net&gt; </font>
		</p>
		<p>
				<font size="1">&lt;/configuration&gt; </font>
		</p>
		<p>
				<font size="1">        .NET 2.0的配置系统就是强大，我们完全不用去参考任何的资料就可以非常简单的写出如上的配置了。如上，from属性就是你将要从哪个邮箱发送Email，host就是smtp服务器地址了，password,port,userName就不用多说了，至于defaultCredentials就需要注意了，当我们不需要smtp服务器验证发送用户时，就将它设为false，反之就设为true，当前大多数SMTP服务器都需要用户验证的，所以一般情况下都就设为true，让它使用我们配置好的用户名和密码去验证是否是合法用户。 </font>
		</p>
		<p>
				<font size="1">        配置文件写好了，接一来就是程序如何调用了，等我写出如下的发送Email后，你就感到非常奇怪，真的就这么简单吗？是的，就是这么简单，来看看： </font>
		</p>
		<p>
				<font size="1">        MailMessage m_message = new MailMessage(); </font>
		</p>
		<p>
				<font size="1">m_message.From = new MailAddress("hjf1223@tom.com"); </font>
		</p>
		<p>
				<font size="1">m_message.To.Add(new MailAddress("hjf1223@gmail.com")); </font>
		</p>
		<p>
				<font size="1">m_message.Subject = "使用.NET 2.0发送邮件"; </font>
		</p>
		<p>
				<font size="1">m_message.Body = "非常简单 "; </font>
		</p>
		<p>
				<font size="1">SmtpClient m_smtpClient = new SmtpClient(); </font>
		</p>
		<p>
				<font size="1">m_smtpClient.Send(m_message); </font>
		</p>
		<p>
				<font size="1">        我们甚至没有一句多余的代码，就是构造一个MailMessage对象，然后构造一个SmtpClient直接就利用它发送邮件了。比起原来的静态方法，没有多一句代码。这里有的朋友可能就要问了？那smtp帐户信息哪里来呢？其实你可以调试一下，这时候m_smtpClient对象里属性就是我们前面配置文件配置的值了。在构重一个SmtpClient时，会自动去读取system.net配置节下的值，如果用户有配置smtp信息的话，那么它将会被自动被始到当前的SmtpClient对象，进而利用它去发送Email。在.NET 2.0中发送邮件就只要做这么多工作了，而且非常稳定。 </font>
		</p>
		<p>
				<font size="1">        总结：虽然在.NET 2.0下，使用System.Web.Mail发送邮件很简单，在错误的时候也可以得到比较详细的异常信息，但是有时候出现的问题也会让你摸不着头脑。最经常出现的是，当你的机器有安装杀毒防火墙，有可能会发不出邮件，但是提示信息却让你无法诊断是哪里出问题了，大意是邮件发送被拒绝。出现这种事况是由于防火墙拒绝了我们对25端口的使用，从而造成无法与SMTP服务器正常通信。解决办法就是关闭它了，相信网上已经有很多的案例了。还有一点要特别注意，要发送邮件的机器必须是直接外网的，由于公司是通过代理上网，所以这个印象特别深。 上面的代码还有一点需要注意，MailMessage对象的From值必须和配置文件中From值是一样的，这里好像也可以不用设，大家可以试一下。 </font>
		</p>
<img src ="http://www.blogjava.net/yeiwei/aggbug/70762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-09-20 13:07 <a href="http://www.blogjava.net/yeiwei/articles/70762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>日志记录组件[Log4net]详细介绍</title><link>http://www.blogjava.net/yeiwei/articles/70761.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 20 Sep 2006 05:06:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/articles/70761.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/70761.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/articles/70761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/70761.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/70761.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一																						Log4net								是基于								.net								开发的一款非常著名的记录日志开源组件。他最早是								2001								年								7								月由								NeoWorks Limited								启动的项目，基本的框架源于另外的一个...&nbsp;&nbsp;<a href='http://www.blogjava.net/yeiwei/articles/70761.html'>阅读全文</a><img src ="http://www.blogjava.net/yeiwei/aggbug/70761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-09-20 13:06 <a href="http://www.blogjava.net/yeiwei/articles/70761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>所阅读的ASP.NET 2.0文章</title><link>http://www.blogjava.net/yeiwei/articles/70759.html</link><dc:creator>圣域飞侠</dc:creator><author>圣域飞侠</author><pubDate>Wed, 20 Sep 2006 04:58:00 GMT</pubDate><guid>http://www.blogjava.net/yeiwei/articles/70759.html</guid><wfw:comment>http://www.blogjava.net/yeiwei/comments/70759.html</wfw:comment><comments>http://www.blogjava.net/yeiwei/articles/70759.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yeiwei/comments/commentRss/70759.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yeiwei/services/trackbacks/70759.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<a href="http://www.asp.net/QUICKSTART/aspnet/default.aspx">
						<font size="1">http://www.asp.net/QUICKSTART/aspnet/default.aspx</font>
				</a>
				<a href="http://beta.asp.net/QUICKSTART/aspnet/default.aspx">
				</a>
				<font size="1">
						<br />
						<br />
				</font>
				<a href="http://msdn.microsoft.com/asp.net/migration/upgrade/default.aspx?pull=/library/en-us/dnvs05/html/migratefromaspnetto2.asp">
						<font size="1">Migrating from ASP.NET 1.x to ASP.NET 2.0</font>
				</a>
				<font size="1">
						<br />
						<br />
				</font>
				<a href="http://msdn.microsoft.com/asp.net/reference/migration/upgrade/default.aspx?pull=/library/en-us/dnaspp/html/conversionissuesasp_net.asp">
						<font size="1">Common ASP.NET 2.0 Conversion Issues and Solutions</font>
				</a>
				<font size="1">
						<br />
						<br />
				</font>
				<a href="http://msdn.microsoft.com/asp.net/reference/migration/upgrade/default.aspx?pull=/library/en-us/dnvs05/html/person_fin.asp">
						<font size="1">Personalization</font>
				</a>
				<font size="1">
						<br />
						<br />
				</font>
				<a href="http://msdn.microsoft.com/asp.net/reference/migration/upgrade/default.aspx?pull=/library/en-us/dnvs05/html/dataaccess.asp">
						<font size="1">Data Access</font>
				</a>
				<font size="1">
						<br />
						<br />
				</font>
				<a href="http://msdn.microsoft.com/asp.net/reference/migration/upgrade/default.aspx?pull=/library/en-us/dnvs05/html/masterpages.asp">
						<font size="1">Master Pages</font>
				</a>
				<font size="1">
						<br />
						<br />
				</font>
				<a href="http://msdn2.microsoft.com/library/58wxa9w5(en-us,vs.80).aspx">
						<font size="1">ASP.NET Development Server</font>
				</a>
				<font size="1">
						<br />
						<br />
				</font>
				<a href="http://www.theserverside.net/articles/showarticle.tss?id=WebParts1">
						<font size="1">From Sharepoint to ASP.NET 2.0WebParts</font>
				</a>
				<font size="1">
						<br />
						<br />
				</font>
				<a href="http://msdn.microsoft.com/msdnmag/issues/05/09/WebParts/default.aspx">
						<font size="1">Personalize Your Portal with User Controls and Custom Web Parts</font>
				</a>
				<font size="1">
						<br />
						<br />
				</font>
				<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvs05/html/webparts.asp">
						<font size="1">Introducing the ASP.NET 2.0 Web Parts Framework <br /></font>
				</a>
				<br />
				<a href="http://msdn.microsoft.com/asp.net/reference/design/default.aspx?pull=/library/en-us/dnvs05/html/masterpages.asp#masterpages_topic7">
						<font size="1">Master Pages in ASP.NET 2.0</font>
				</a>
				<font size="1">
						<br />
						<br />
				</font>
				<a href="http://www.informit.com/articles/article.asp?p=351414&amp;rl=1">
						<font size="1">ASP.NET 2.0 Security</font>
				</a>
		</div>
<img src ="http://www.blogjava.net/yeiwei/aggbug/70759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yeiwei/" target="_blank">圣域飞侠</a> 2006-09-20 12:58 <a href="http://www.blogjava.net/yeiwei/articles/70759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>