ASPX 生成html静态页面的问题

tan10040622 2008-03-11 01:33:08
先把我做的站简单介绍一下:整个站aspx页面不是很多,10页左右,我想把其中一些要经常访问的页面转变成静态的,这些页面结构都很简单,并且数据量不是很大,但是会页面内容实时性比较强,随着时间变化比较大。我的设计就是在global.asax 里面 用一个 timer 每隔5分钟生成一次静态页面,生成静态页的方法就是 对这个页面一个webquest 然后吧 stream 读到 html 文件里面去。用这种方法 存在两个问题:1.先贴出代码 :


void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
System.Timers.Timer timehtml = new System.Timers.Timer(1000 * 60 * 5);
timehtml.AutoReset = true;
timehtml.Enabled = true;
timehtml.Elapsed += new System.Timers.ElapsedEventHandler(OnTime);
}

void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码

}

void OnTime(object sender, System.Timers.ElapsedEventArgs e)
{
/////////需要修改
getUrlResponse("http://www.xxxxx.com/atoh.aspx");

}
bool getUrlResponse(string Url)
{
string errorMsg = "";
try
{
System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
System.Net.WebResponse wResp = wReq.GetResponse();
}
catch (System.Exception ex)
{
Application["result"] += ex.Message;
return false;
}
return true;
}这个 getUrlResponse 的主要作用就是请求一下 atoh.aspx 这个页面 ,因为 atoh.aspx这个页面的 pageload里调用了一个 函数 这个函数实现了 aspx 到 html 的转换 。
其中主要存在的问题是 :getUrlResponse 每次只能被执行 2次 ,第三次时到 System.Net.WebResponse wResp = wReq.GetResponse();了 这句 执行不下去了
然后就报错 timeout ,请各位大虾帮帮忙。

问题2:这种生成静态页面的方法,也是从网上拷贝过来,然后自己改了改,当时就觉的这种方法简单,后来看到有人说这个是最傻的方法。我挺费解,我觉的这种方法还行吧,至少不会占用系统很多资源。本人是菜鸟,认识可能比较浅,请大虾门指教一下,对于我做的站的这种需求,我用的这种方法适用吗?是不是有更稳定 更高效的方法。



...全文
421 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
alvin_baby 2009-12-03
  • 打赏
  • 举报
回复
dasasdsadas
tan10040622 2008-03-11
  • 打赏
  • 举报
回复
谢谢各位的指教,分也不知道怎么给,就给我比较赞同的那两位了 。至于为什么要把数据量不是很大,结构简单的页面做成静态地。因为这个网站是挂在虚拟主机上的,资源有限,所以。。。。,做成静态地也便于收录。
大宇_ 2008-03-11
  • 打赏
  • 举报
回复
不应该用时间刷新,应该用页面更新次数,例如如果是条目每更新几条刷新一次毕竟好,用时间刷新还不如作成动态直接调用数据参数的呢
myvicy 2008-03-11
  • 打赏
  • 举报
回复
太占资源了,页面不在多少,如果访问量大的话一样会导致系统性能下降的。
octverve 2008-03-11
  • 打赏
  • 举报
回复
絕對不應該在一個站點中使用WebRequest去訪問同一個站點的頁面.這可能會導致阻塞IIS進程而發生超時.即使不阻塞,也會佔用寶貴的IIS線程.

-----------------------------------------------------------------
有理,但别忘了楼主的项目规模“整个站aspx页面不是很多,10页左右”,呵呵
octverve 2008-03-11
  • 打赏
  • 举报
回复
"整个站aspx页面不是很多,10页左右……“

直接用HTML得了,呵呵
slimboy123 2008-03-11
  • 打赏
  • 举报
回复
5分钟刷新一次有必要做成静态的吗,还不如用缓存。
nj_1st_excellence 2008-03-11
  • 打赏
  • 举报
回复
學習
b哈利路亚d 2008-03-11
  • 打赏
  • 举报
回复
5分钟刷新,不会经常妨碍用户浏览?
而且数据量不大的简单页面,为什么非要弄成静态的。访问量非常大?
不行的话Ajax不行?
boblaw 2008-03-11
  • 打赏
  • 举报
回复
絕對不應該在一個站點中使用WebRequest去訪問同一個站點的頁面.這可能會導致阻塞IIS進程而發生超時.即使不阻塞,也會佔用寶貴的IIS線程.
可以在其他非同一個應用程序池的網站訪問,或者使用win form程序定時訪問.

wahcr8 2008-03-11
  • 打赏
  • 举报
回复
学习下了
笑羽酣天 2008-03-11
  • 打赏
  • 举报
回复
不知道,学习一下啦
Atai-Lu 2008-03-11
  • 打赏
  • 举报
回复
呃,这样的话,感觉还不如直接使用缓存好点...
octverve 2008-03-11
  • 打赏
  • 举报
回复
在ASP.NET 2.0中,有时候需要对ASP.NET生成的HTML代码进行处理,或者是保存成静态文件。ASP.NET 提供了直接将请求保存成文件的方法:HttpRequest.SaveAs方法。下面这个方法就是在ASP.NET 2.0中得到ASP.NET生成的HTML代码,同时,生成一个静态文件的方法。

C#

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
// 计算数据,完全可以从数据看取得
ICollection CreateDataSource( )
{
System.Data.DataTable dt = new System.Data.DataTable();
System.Data.DataRow dr;
dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)));

for (int i = 0 ; i < 50 ; i++)
{
System.Random rd = new System.Random(Environment.TickCount * i); ;
dr = dt.NewRow();
dr[0] = "班级" + i.ToString();
dr[1] = "【孟子E章】" + i.ToString();
dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
dr[5] = System.Math.Round(rd.NextDouble() * 100, 2);
dt.Rows.Add(dr);
}
System.Data.DataView dv = new System.Data.DataView(dt);
return dv;
}

protected void Page_Load( object sender, EventArgs e )
{
if (!IsPostBack)
{
GridView1.DataSource = CreateDataSource();
GridView1.DataBind();
}
}
protected override void Render( HtmlTextWriter writer )
{
System.IO.StringWriter html = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter tw = new System.Web.UI.HtmlTextWriter(html);
base.Render(tw);
System.IO.StreamWriter sw;
sw = new System.IO.StreamWriter(Server.MapPath("a.htm"), false, System.Text.Encoding.Default);
sw.Write(html.ToString());
sw.Close();
tw.Close();
Response.Write(html.ToString());
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>得到ASP.NET生成的HTML</title>
</head>
<body>
<form id="Form1" runat="server">
<asp:GridView ID="GridView1" runat="server" Font-Size="12px" BackColor="#FFFFFF"
GridLines="Both" CellPadding="4" Width="560">
<HeaderStyle BackColor="#EDEDED" Height="26px" />
</asp:GridView>
</form>
</body>

VB.NET

<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Function CreateDataSource() As ICollection
Dim dt As System.Data.DataTable = New System.Data.DataTable
Dim dr As System.Data.DataRow
dt.Columns.Add(New System.Data.DataColumn("学生班级", GetType(System.String)))
dt.Columns.Add(New System.Data.DataColumn("学生姓名", GetType(System.String)))
dt.Columns.Add(New System.Data.DataColumn("语文", GetType(System.Decimal)))
dt.Columns.Add(New System.Data.DataColumn("数学", GetType(System.Decimal)))
dt.Columns.Add(New System.Data.DataColumn("英语", GetType(System.Decimal)))
dt.Columns.Add(New System.Data.DataColumn("计算机", GetType(System.Decimal)))
Dim i As Integer = 0
For i = 0 To 50 - 1

Dim rd As System.Random = New System.Random(Environment.TickCount * i)
dr = dt.NewRow
dr(0) = "班级" + i.ToString
dr(1) = "【孟子E章】" + i.ToString
dr(2) = System.Math.Round(rd.NextDouble * 100, 2)
dr(3) = System.Math.Round(rd.NextDouble * 100, 2)
dr(4) = System.Math.Round(rd.NextDouble * 100, 2)
dr(5) = System.Math.Round(rd.NextDouble * 100, 2)
dt.Rows.Add(dr)
Next
Dim dv As System.Data.DataView = New System.Data.DataView(dt)
Return dv
End Function

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Not IsPostBack Then
GridView1.DataSource = CreateDataSource()
GridView1.DataBind()
End If
End Sub

Protected Overloads Overrides Sub Render(ByVal writer As HtmlTextWriter)
Dim html As System.IO.StringWriter = New System.IO.StringWriter
Dim tw As System.Web.UI.HtmlTextWriter = New System.Web.UI.HtmlTextWriter(html)
MyBase.Render(tw)
Dim sw As System.IO.StreamWriter
sw = New System.IO.StreamWriter(Server.MapPath("a.htm"), False, System.Text.Encoding.Default)
sw.Write(html.ToString)
sw.Close()
tw.Close()
Response.Write(html.ToString)
End sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>得到ASP.NET生成的HTML</title>
</head>
<body>
<form id="Form1" runat="server">
<asp:GridView ID="GridView1" runat="server" Font-Size="12px" BackColor="#FFFFFF"
GridLines="Both" CellPadding="4" Width="560">
<HeaderStyle BackColor="#EDEDED" Height="26px" />
</asp:GridView>
</form>
</body>
</html


</html>

kindyaloner 2008-03-11
  • 打赏
  • 举报
回复
路过,友情 up
iuhxq 2008-03-11
  • 打赏
  • 举报
回复
既然固定5分钟,不如用OutputCatch了

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧