私は植物の個体数を管理するWebアプリケーションを開発しています。このアプリケーションの機能の1つは、植物間の関係をグラフとして表示する機能です。この視覚化はドットファイルとして生成され、GraphVizを使用してSVGに変換されます。結果のSVGマークアップは、Response.Write()手法を使用して、.aspxファイルを介してブラウザーにレンダリングされます。
Aspxマークアップ:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Visualisation.aspx.cs" Inherits="Webapp.PopulationManager.Visualisation" %>
コードビハインド:
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
// ...snip...
string svgString = PopulationModule.VisualiseTable(connectionTable, title, url.ToString());
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "image/svg-xml";
Response.AddHeader("Content-Disposition", string.Format("inline;filename={0}", filename));
Response.Write(svgString);
Response.Flush();
}
}
この手法は、私のWindows開発マシンで完全に機能します(SVGファイルを保存/開くように求めるダイアログがポップアップ表示されます)。
ただし、このアプリをホストしているLinuxサーバーにデプロイすると失敗します。ページはSVGマークアップを返しますが、最初の行に約5〜6文字のガベージ文字列が追加されるため、ブラウザーはSVGファイルの解析に失敗します。
Linuxホストは、RHEL5、Mono 1.9、およびLighttpd(Monoと通信するためのfast-cgiを使用)を実行します。
LinuxサーバーでSVGマークアップがクリーンに生成されることを確認しました。また、LighttpdではなくXSP2を使用してWebアプリを実行すると、ページは期待どおりに機能します。ガベージ行は、SVGマークアップが生成された後のどこかに追加されます(したがって、応答を書き出す前に最初の行を単純に削除することはできません)。
誰かがこれを引き起こしている可能性があることを知っていますか?オプション、アイデア、考えを大いに受け取りました!
ありがとう。
編集:
文字は、ビジュアライゼーションを作成するエンティティによって異なりますが、特定のエンティティでは同じままです。したがって、オブジェクトAのSVGビジュアライゼーションを作成すると、最初の行で常に文字列1f35がガベージとして取得されます。