静态生成html出错的问题

walkingp 2009-06-30 11:08:52

//全部生成html
protected void MakeHtml(object sender, EventArgs e)
{
btnMakeHtml.Enabled = false;
btnMakeHtml.Text = "生成可能需要一段时间,请耐心等待……";
common cmn = new common();
string url = "http://" + Request.ServerVariables["Http_Host"] + Request.ServerVariables["URL"];
url = url.Substring(0, url.LastIndexOf("/"));
url = url.Substring(0, url.LastIndexOf("/"));
url = url + "/template/";
string fp = Server.MapPath("manage_news.aspx");
fp = fp.Substring(0, fp.LastIndexOf("\\"));
fp = fp.Substring(0, fp.LastIndexOf("\\"));
fp = fp + "\\html\\news\\";
//生成news_list.aspx
if (!Directory.Exists(fp))
{
Directory.CreateDirectory(fp);
}
else
{
string urlList;//获取数据网址
string fpHtml;//生成文件名(含路径)

// int iPageSize = Hope_T_NewManager.GetHope_T_NewsNum();
IList<Hope_T_NewsClass> listNewsClass = Hope_T_NewsClassManager.GetAllHope_T_NewsClassesIndex();
foreach (Hope_T_NewsClass list in listNewsClass)
{
int iNewsNumByClass = Hope_T_NewManager.GetHope_T_NewsNumByNews_ClassId(list.News_ClassId);
if (iNewsNumByClass > 30)//大于一
{
int iPageSize = iNewsNumByClass / 30;
for (int i = 1; i <= iPageSize + 1; i++)
{
urlList = url + "news_list.aspx?news_classid=" + list.News_ClassId + "&page=" + i.ToString();
fpHtml = fp + "news_list" + list.News_ClassId + "_" + i.ToString() + ".html";
string sContent = cmn.GetDataFromRemoteUrl(urlList);
sContent = sContent.Replace("$firstPage$", "news_list" + list.News_ClassId + "_1.html");//首页
sContent = sContent.Replace("$prePage$", "news_list" + list.News_ClassId + "_" + (i - 1).ToString() + ".html");//上一页
sContent = sContent.Replace("$nextPage$", "news_list" + list.News_ClassId + "_" + (i + 1).ToString() + ".html");//下一页
sContent = sContent.Replace("$lastPage$", "news_list" + list.News_ClassId + "_" + (iPageSize + 1).ToString() + ".html");//尾页
IList<Hope_T_Ad> listAd = Hope_T_AdManager.GetAllAd();
foreach (Hope_T_Ad list1 in listAd)
{
sContent = sContent.Replace(list1.Ad_Label, list1.Ad_Code);
}
cmn.CreateList(sContent, true, fpHtml);
}
}
urlList = url + "news_list.aspx?news_classid=" + list.News_ClassId.ToString();
fpHtml = fp + "news_list" + list.News_ClassId + ".html";
string sContentList = cmn.GetDataFromRemoteUrl(urlList);
IList<Hope_T_Ad> listAdList = Hope_T_AdManager.GetAllAd();
foreach (Hope_T_Ad list1 in listAdList)
{
sContentList = sContentList.Replace(list1.Ad_Label, list1.Ad_Code);
}
sContentList = sContentList.Replace("$firstPage$", "news_list" + list.News_ClassId + ".html");//首页
sContentList = sContentList.Replace("$prePage$", "news_list" + list.News_ClassId + ".html");//上一页
sContentList = sContentList.Replace("$nextPage$", "news_list" + list.News_ClassId + ".html");//下一页
sContentList = sContentList.Replace("$lastPage$", "news_list" + list.News_ClassId + ".html");//尾页
cmn.CreateList(sContentList, true, fpHtml);
}
}
//生成全部news_info.aspx
IList<Hope_T_New> listNews = Hope_T_NewManager.GetAllHope_T_News();
StringBuilder sb = new StringBuilder();
foreach (Hope_T_New list in listNews)
{
string strUrl = url + "news_info.aspx?news_id=" + list.News_Id.ToString();
string strFilePath = fp + Convert.ToDateTime(list.News_PostTime.ToString()).ToShortDateString().Replace("-", "") + list.News_Id.ToString() + ".html";
string sContent = cmn.GetDataFromRemoteUrl(strUrl);
IList<Hope_T_Ad> listAd = Hope_T_AdManager.GetAllAd();
foreach (Hope_T_Ad list1 in listAd)
{
sContent = sContent.Replace(list1.Ad_Label, list1.Ad_Code);
}
if (cmn.CreateList(sContent, true, strFilePath))
{
}
}
btnMakeHtml.Text = "重新生成";
btnMakeHtml.Enabled = true;
Hope_T_Log objLog = new Hope_T_Log();
objLog.Log_Content = "生成全部文章";
objLog.Log_Time = Convert.ToDateTime(System.DateTime.Now.ToString());
objLog.Log_User = Session["HopeUser"].ToString();
Hope_T_LogManager.AddHope_T_Log(objLog);
ClientScript.RegisterStartupScript(typeof(string), "成功", "alert(\"生成成功\")", true);




public class common
{
public common()
{
}
/// <summary>
/// 接收数据流并生成html
/// </summary>
/// <param name="url">url或者数据流</param>
/// <param name="isAlreadyData">是否是数据流</param>
/// <param name="fna">生成文件</param>
/// <returns>是否成功</returns>
public bool CreateList(string url,bool isAlreadyData, string fna)
{
bool ok;
StreamWriter sw = null; //用来写文件
Encoding code = Encoding.GetEncoding("utf-8"); //定义编码

string strHtml;
if (isAlreadyData == true)
strHtml = url;
else
strHtml=CommonXMLGetData(url);

//写入文件
try
{
sw = new StreamWriter(fna, false, code);
sw.Write(strHtml);
sw.Flush();
sw.Close();
sw.Dispose();
ok = true;
}
catch (Exception ex)
{
HttpContext.Current.Response.Write("<p style=\"font-size:12px\">写入文件出错:" + ex.Message + "<a href=\"javascript:history.back()\" title=\"返回\">返回</a>");
HttpContext.Current.Response.End();
ok = false;
}
finally
{
}
return ok;
}

public string GetDataFromRemoteUrl(string url)
{
return CommonXMLGetData(url);
}
protected static string CommonXMLGetData(string url)
{
//准备生成
string strHtml;
Encoding code = Encoding.GetEncoding("utf-8"); //定义编码
StreamReader sr = null; //用来读取流
//构造web请求,发送请求,获取响应
WebRequest HttpWebRequest = null;
WebResponse HttpWebResponse = null;
HttpWebRequest = WebRequest.Create(url);
try
{
HttpWebResponse = HttpWebRequest.GetResponse();
}
catch(Exception ex)
{
HttpContext.Current.Response.Write("出错信息:" + ex.Message);
}

//获得流
sr = new StreamReader(HttpWebResponse.GetResponseStream(), code);
strHtml = sr.ReadToEnd();
sr.Close();
sr.Dispose();
return strHtml;
}

这段代码,在我本机上生成完全正常,但发布以后在网站上运行就会报错。(两者使用的是同一个数据库)
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:


[NullReferenceException: 未将对象引用设置到对象的实例。]
common.CommonXMLGetData(String url) +138
common.GetDataFromRemoteUrl(String url) +7
manage_manage_news.MakeHtml(Object sender, EventArgs e) +1034
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102


请问如何解决??
...全文
114 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mamaqin 2010-06-09
  • 打赏
  • 举报
回复
我的关闭了,也是这个错
walkingp 2009-07-16
  • 打赏
  • 举报
回复
已解决了
是使用了StreamerReader未关闭造成的。
zmm12 2009-06-30
  • 打赏
  • 举报
回复
String url 是空值

62,266

社区成员

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

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

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

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