我正在开发一个管理植物种群的 Web 应用程序。该应用程序的一个特点是能够以图表的形式查看植物之间的关系。此可视化生成为点文件,然后使用 GraphViz 转换为 SVG。然后使用 Response.Write() 技术通过 .aspx 文件将生成的 SVG 标记呈现给浏览器。
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(使用 fast-cgi 与 Mono 对话)。
我已经验证了 SVG 标记是在 Linux 服务器上干净地生成的;如果我使用 XSP2 而不是 Lighttpd 运行 Web 应用程序,该页面将按预期工作。在生成 SVG 标记之后的某处添加了垃圾行(所以我不能在写出响应之前简单地删除第一行)。
有谁知道这可能是什么原因造成的?选项、想法和想法大受好评!
谢谢。
编辑:
字符根据我为其创建可视化的实体而有所不同 - 但对于给定的实体保持不变。因此,如果我为对象 A 创建 SVG 视觉效果,我将始终在第一行将字符串 1f35 作为垃圾。