1

Renderメソッドをオーバーライドし、HtmlAgilityPackを使用して、Webサイトのレンダリングされた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()を使用するだけで、Webサイトに表示されるテーブルの正確な表現が得られます。

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 に答える