请教各位大哥。我做了一个利用Global.asax定时批量生成静态页的程序。但是怎么调试在本地IIS里运行是可以生成的,但是上传到服务器上就无法生成了。不知道是什么原因,请各位帮帮忙。
注:
1. 服务器有读写权限。
2. 网上所说的Global.asax不执行是因为WEB站点里有PrecompiledApp.config 文件。该文件我已经删除了。源代码如下: void BuildStaticPagesTimer_Callback(object state)
{
string s = DateTime.Now.ToShortTimeString();
if (DateTime.Now.ToShortTimeString() == "5:00")
{
//每日早晨5:00生成聚合页面
Build(0, 0);
}
}
void Build(int parentId, int depth)
{
//在这里写生成静态页面的代码
using (ISession session = NHibernateSession.Session)
{
IList list = boardDao.SelectClass(session, parentId);
foreach (Uupo_BoardInfo board in list)
{
if (Convert.ToInt32(artDao.RecordCount_WithBoard(session, board.Board_id)[0]) > 0)
{
try
{
readFileHtml("http://www.abc.com/RSS.aspx?id=" + board.Board_id); //通过地址读取内容
ConvertPage("http://www.abc.com/RSS.aspx?id=" + board.Board_id, "RSS\\RSS_" + board.Board_id + ".xml");
}
catch(Exception ex)
{
File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "LogInfo.txt", DateTime.Now.ToString() + " ," + ex.Message + "\r");
}
}
Build(board.Board_id, depth + 1);
}
}
}
/// <summary>
/// 生成页面
/// </summary>
/// <param name="sourceUrl">原URL地址</param>
/// <param name="convertUrl">生成相对路径地址</param>
/// <param name="strInfo">生成反馈信息</param>
private void ConvertPage(string sourceUrl, string convertUrl)
{
filestream = new FileStream( AppDomain.CurrentDomain.BaseDirectory + convertUrl, FileMode.Create);
Bt = System.Text.Encoding.Default.GetBytes(strIndexHtml);
filestream.Write(Bt, 0, Bt.Length);
if (filestream != null) filestream.Close();
} /// <summary>
/// 读取HTML文件
/// </summary>
/// <param name="sourceUrl"></param>
private void readFileHtml(string sourceUrl) { strIndexHtml = UupoSystem.Web.RemoteSave.GetRemoteHtml(sourceUrl); }
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
//下面的代码是关键,可解决IIS应用程序池自动回收的问题
Thread.Sleep(1000);
//这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start
//string url = "http://www.abc.com/manage_ment/admin_login.aspx";
string url = "http://www.abc.com/manage_ment/admin_login.aspx";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
//////////////////////////////////////写入日志文件///////////////////////////////////////////
File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "LogInfo.txt", DateTime.Now.ToString() + " ,执行 Application_Error \r"); } void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
if (BuildStaticPagesTimer == null)
{
lock (locker)
{
if (BuildStaticPagesTimer == null)
{
BuildStaticPagesTimer = new System.Threading.Timer(BuildStaticPagesTimer_Callback, locker, 0, 1 * 60 * 1000);
}
}
} }
注:
1. 服务器有读写权限。
2. 网上所说的Global.asax不执行是因为WEB站点里有PrecompiledApp.config 文件。该文件我已经删除了。源代码如下: void BuildStaticPagesTimer_Callback(object state)
{
string s = DateTime.Now.ToShortTimeString();
if (DateTime.Now.ToShortTimeString() == "5:00")
{
//每日早晨5:00生成聚合页面
Build(0, 0);
}
}
void Build(int parentId, int depth)
{
//在这里写生成静态页面的代码
using (ISession session = NHibernateSession.Session)
{
IList list = boardDao.SelectClass(session, parentId);
foreach (Uupo_BoardInfo board in list)
{
if (Convert.ToInt32(artDao.RecordCount_WithBoard(session, board.Board_id)[0]) > 0)
{
try
{
readFileHtml("http://www.abc.com/RSS.aspx?id=" + board.Board_id); //通过地址读取内容
ConvertPage("http://www.abc.com/RSS.aspx?id=" + board.Board_id, "RSS\\RSS_" + board.Board_id + ".xml");
}
catch(Exception ex)
{
File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "LogInfo.txt", DateTime.Now.ToString() + " ," + ex.Message + "\r");
}
}
Build(board.Board_id, depth + 1);
}
}
}
/// <summary>
/// 生成页面
/// </summary>
/// <param name="sourceUrl">原URL地址</param>
/// <param name="convertUrl">生成相对路径地址</param>
/// <param name="strInfo">生成反馈信息</param>
private void ConvertPage(string sourceUrl, string convertUrl)
{
filestream = new FileStream( AppDomain.CurrentDomain.BaseDirectory + convertUrl, FileMode.Create);
Bt = System.Text.Encoding.Default.GetBytes(strIndexHtml);
filestream.Write(Bt, 0, Bt.Length);
if (filestream != null) filestream.Close();
} /// <summary>
/// 读取HTML文件
/// </summary>
/// <param name="sourceUrl"></param>
private void readFileHtml(string sourceUrl) { strIndexHtml = UupoSystem.Web.RemoteSave.GetRemoteHtml(sourceUrl); }
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
//下面的代码是关键,可解决IIS应用程序池自动回收的问题
Thread.Sleep(1000);
//这里设置你的web地址,可以随便指向你的任意一个aspx页面甚至不存在的页面,目的是要激发Application_Start
//string url = "http://www.abc.com/manage_ment/admin_login.aspx";
string url = "http://www.abc.com/manage_ment/admin_login.aspx";
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
Stream receiveStream = myHttpWebResponse.GetResponseStream();//得到回写的字节流
//////////////////////////////////////写入日志文件///////////////////////////////////////////
File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory + "LogInfo.txt", DateTime.Now.ToString() + " ,执行 Application_Error \r"); } void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
if (BuildStaticPagesTimer == null)
{
lock (locker)
{
if (BuildStaticPagesTimer == null)
{
BuildStaticPagesTimer = new System.Threading.Timer(BuildStaticPagesTimer_Callback, locker, 0, 1 * 60 * 1000);
}
}
} }
2,System.Threading.Timer可能会停止的,网站20分钟内没人访问会自动停止的,因此你必须在System.Threading.Timer里面自己访问网站,
3,查看事件查看器里面的错误记录,可能权限问题或者代码出错了
把cs代码和Global.asax写在一个文件里面
静态页面
protected override void Render(HtmlTextWriter writer) {
StreamWriter r=new StreamWriter(Server.MapPath(""), false,System.Text.Encoding.UTF8);
HtmlTextWriter h=new HtmlTextWriter(r);
base.Render(h);
r.Close();
h.Close();
}
StringWriter wr = new StringWriter();
Server.Execute("", wr);
this.lit.Text = Server.HtmlEncode(wr.ToString());
File.WriteAllText(Server.MapPath(""), wr.ToString());
log4net记录日志
是否执行了代码
代码从global.asax.cs里移到global.asax里,不要global.asax.cs
把cs代码和Global.asax写在一个文件里面