服务器端的myPage.aspx
客户端显示myPage.htm
客户端访问
针对这种资源的浪费情况,我们现在来设计一个解决方案。我们先将那些一段时间内内容不会有什么改变,但又遭大量访问的动态页面生成静态的页面存放在服务器上,当客户端发出访问请求时,就让他们直接访问我们生成的静态页面,过程如下图。
客户端显示myPage.htm
客户端访问
Execute
服务器端的myPage.aspx
服务器端的myPage.htm
现在我们需要一个后台程序来完成这些事情。
我们可将此做成一个类class AspxToHtml ,其代码如下:
using System;
using System.IO;
using System.Web.UI;
namespace LeoLu
{
/// <summary>
/// AspxToHtml 的摘要说明。
/// </summary>
public class AspxToHtml
{
/// <summary>
/// Aspx文件url
/// </summary>
public string strUrl;
/// <summary>
/// 生成html文件的保存路径
/// </summary>
public string strSavePath;
/// <summary>
/// 生成html文件的文件名
/// </summary>
public string strSaveFile;
public AspxToHtml()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 将strUrl放到strSavePath目录下,保存为strSaveFile
/// </summary>
/// <returns>是否成功</returns>
public bool ExecAspxToHtml()
{
try
{
StringWriter strHTML = new StringWriter();
System.Web.UI.Page myPage = new Page();
//System.Web.UI.Page中有个Server对象,我们要利用一下它
myPage.Server.Execute(strUrl, strHTML);
//将asp_net.aspx将在客户段显示的html内容读到了strHTML中
StreamWriter sw = new StreamWriter(strSavePath + strSaveFile, true, System.Text.Encoding.GetEncoding("GB2312"));
//新建一个文件Test.htm,文件格式为GB2312
sw.Write(strHTML.ToString());
//将strHTML中的字符写到Test.htm中
strHTML.Close();
//关闭StringWriter
sw.Close();
//关闭StreamWriter
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 将Url放到Path目录下,保存为FileName
/// </summary>
/// <param name="Url">aspx页面url</param>
/// <param name="Path">生成html文件的保存路径</param>
/// <param name="FileName">生成html文件的文件名</param>
/// <returns></returns>
public bool ExecAspxToHtml(string Url, string Path, string FileName)
{
try
{
StringWriter strHTML = new StringWriter();
System.Web.UI.Page myPage = new Page();
//System.Web.UI.Page中有个Server对象,我们要利用一下它
myPage.Server.Execute(Url, strHTML);
//将asp_net.aspx将在客户段显示的html内容读到了strHTML中
StreamWriter sw = new StreamWriter(Path + FileName, true, System.Text.Encoding.GetEncoding("GB2312"));
//新建一个文件Test.htm,文件格式为GB2312
sw.Write(strHTML.ToString());
//将strHTML中的字符写到Test.htm中
strHTML.Close();
//关闭StringWriter
sw.Close();
//关闭StreamWriter
return true;
}
catch
{
return false;
}
}
}
}