我通过覆盖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(),我会在网站上显示该表的精确表示。
答案 0 :(得分:1)
试试这个。也许Save方法没有关闭底层流。
using( FileStream stream = File.OpenWrite( currDir + "\\" + reportDir + "\\dashboardTable.html" ) ){
doc.Save(stream);
stream.Close();
}
答案 1 :(得分:0)
修改强>
Per @ L.B的评论似乎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的问题。顺便说一下,如果这个改变有所不同,你应该从一个干净的服务器环境开始,而不是你已经在删除有问题的文件时遇到问题。