我正在开发一个管理植物种群的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、mono1.9和Lighttpd (使用fast-cgi与Mono对话)。
我已经验证了SVG标记是在Linux服务器上干净地生成的;如果我使用XSP2而不是Lighttpd运行web应用程序,页面将按预期工作。垃圾行是在SVG标记生成之后添加的(所以我不能简单地在写出响应之前删除第一行)。
有人知道这可能是什么原因吗?选项、想法和想法都得到了极大的认可!
谢谢。
编辑:
根据我为其创建可视化的实体,这些字符会有所不同,但对于给定的实体,这些字符是相同的。因此,如果我为对象A创建一个SVG可视化,我总是会在第一行得到字符串1f35作为垃圾。
发布于 2009-11-18 20:04:56
请更新到最新的Mono (2.4.2.3),然后重试。由于IIRC Red Hat没有针对Mono的rpms,因此您必须构建它并从源代码安装。1.9已经非常过时了。从那时起,Mono的所有部分都得到了改进。
发布于 2009-11-19 19:54:58
您的Content-Type无效,应为"image/svg+xml“。
https://stackoverflow.com/questions/1755079
复制相似问题