1

我通过重写 Render 方法并使用 HtmlAgilityPack 来保存网站的一些呈现的 html。这是代码:

protected override void Render(HtmlTextWriter writer)
{
    using (HtmlTextWriter htmlwriter = new HtmlTextWriter(new StringWriter()))
    {
        base.Render(htmlwriter);
        string output= htmlwriter.InnerWriter.ToString();
        var doc = new HtmlDocument();
        doc.LoadHtml(output);
        doc.Save(currDir + "\\" + reportDir + "\\dashboardTable.html");
    }
}

但是,某些进程不会放开保存的文件,我无法从服务器中删除它。有谁知道会导致这种情况的 HtmlAgilityPack 问题?

任何建议表示赞赏。

问候。

编辑:

我已经尝试了两种建议的方法。我无法确定它们是否是解决方案,因为由于无法删除的文件,我的应用程序在服务器上被冻结。但是,当我在自己的机器上使用这些解决方案时,呈现的 HTML 不再保存为 HTML 表格,而是像这样:

INCIDENT MANAGEMENT
Jul '12     F'12
Trend   F'12    2011
(avg)
Severe Incidents (Sev1/2):  3       2.1 4.16
Severe Avoidable Incidents (Sev1/2):    1       1.3 1.91
Incidents (Sev3):   669     482 460.92
Incidents (Sev4) - No business Impact:  1012        808 793
Proactive Tickets Opened:   15      19.3    14
Proactive Tickets Resolved/Closed:  14      17.3    11
CHANGE MANAGEMENT
Total Planned Changes:  531     560 583.58
Change Success Rate (%):    99.5        99.4    99
Non-Remedial Urgent Changes:    6       11  47.08
PROBLEM MANAGEMENT
New PIRs:   2       1.4 2
Closed PIRs:    0       2   3
Overdue Action items:   2       3.2 0
COMPLIANCE MEASUREMENTS
    Jul Trend   Jun
Total Number of Perimeter Devices:  250     258
Perimeter Devices - Non Compliant:  36      31
Total Number of Internal Devices:   6676        6632
Internal Devices - Non Compliant:   173     160
Unauthorized Perimeter Changes: 0       0
Unauthorized Internal Changes   0       0
LEGEND

ISP LINKS
July    June    Trend
SOC CPO DRP SOC CPO DRP
40% 34% 74%     39% 35% 74%     
BELL MPLS HEAD ENDS
July    June    Trend
SOC CPO SOC CPO
8%  5%  7%  10% 8%  5.5%    7%  10% 
ENTERPRISE NETWORK (# of issues called out)
July    June    Trend
CORE    FW/DMZ  CORE    FW/DMZ
1       0       1       0   
US & INTL (# of issues called out)
July    June    Trend
US  Intl    US  Intl
2   2   2   3   
LINE OF BUSINESS    BELL WAN MPLS
<>  50%-65% >65%    <>  50%-65% >65%    Trend
Retail: 2272    0   1   2269    4   0   
Business Banking:   59  1   0   60  0   0   
Wealth: 122 2   0   121 2   1   
Corporate:  51  0   0   49  2   0   
Remote ATM: 280 0   0   280 0   0   
TOOLS
Version Currency    Vulnerability Status    Health Status
Key Messages:

其中仅保存了文本数据,并且缺少所有 HTML 和 CSS。如果我只使用 doc.Save() ,我会得到网站上显示的表格的精确表示。

4

2 回答 2

1

试试这个。也许 Save 方法没有关闭底层流。

using( FileStream stream = File.OpenWrite( currDir + "\\" + reportDir + "\\dashboardTable.html" ) ){
    doc.Save(stream);
    stream.Close();
}
于 2012-08-27T19:32:13.123 回答
0

编辑

根据@LB 的评论,似乎 HtmlAgilityPack 确实使用了using我的示例中的块,因此它将确保流被关闭。

因此,正如我在原始答案末尾所建议的那样,这一定是服务器环境问题

原始答案

这可能是 HtmlAgilityPack 的某种错误 - 您可能希望将其报告给开发人员。

但是,为了消除这种可能性,您可能需要考虑显式控制StreamWriter文件的创建,以便您自己显式关闭它。替换这一行:

doc.Save(currDir + "\\" + reportDir + "\\dashboardTable.html");

具有以下内容:

using (StreamWriter fileWriter = new StreamWriter(currDir + "\\" + reportDir + "\\dashboardTable.html"))
{
  doc.Save(fileWriter);
  fileWriter.Close();
}

如果即使进行此更改后问题仍然存在,则表明您的服务器环境存在问题,而不是 HtmlAgilityPack 存在问题。顺便说一句,要测试此更改是否会产生影响,您应该从干净的服务器环境开始,而不是在删除相关文件时已经遇到问题的环境。

于 2012-08-27T19:32:11.157 回答