0

我正在开发一个管理植物种群的 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 作为垃圾。

4

2 回答 2

3

您的 Content-Type 无效,应为“image/svg+xml”。

于 2009-11-19T11:54:58.297 回答
0

请更新到最新的 Mono (2.4.2.3),然后重试。由于 IIRC Red Hat 没有 Mono 的 rpm,因此您必须构建它并从源代码安装。1.9 已经过时了。从那时起,Mono 的所有部分都得到了改进。

于 2009-11-18T12:04:56.407 回答