C# Mono/Lighttpd-通过Response.Write()返回的添加到SVG文件中的垃圾文本
我正在开发一个管理植物种群的web应用程序。该应用程序的一个特点是能够以图形的形式查看植物之间的关系。该可视化生成为点文件,然后使用GraphViz转换为SVG。然后,使用Response.Write()技术,通过.aspx文件将生成的SVG标记呈现给浏览器 Aspx标记:C# Mono/Lighttpd-通过Response.Write()返回的添加到SVG文件中的垃圾文本,c#,asp.net,mono,svg,lighttpd,C#,Asp.net,Mono,Svg,Lighttpd,我正在开发一个管理植物种群的web应用程序。该应用程序的一个特点是能够以图形的形式查看植物之间的关系。该可视化生成为点文件,然后使用GraphViz转换为SVG。然后,使用Response.Write()技术,通过.aspx文件将生成的SVG标记呈现给浏览器 Aspx标记: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Visualisation.aspx.cs" Inherits="Webapp.PopulationM
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Visualisation.aspx.cs" Inherits="Webapp.PopulationManager.Visualisation" %>
这种技术在我的Windows开发机器上非常有效(弹出一个对话框,要求我保存/打开SVG文件)
但是,当部署到承载此应用程序的Linux服务器时,它会失败-页面返回SVG标记,但在第一行添加了一个大约5-6个字符的垃圾字符串,导致浏览器无法解析SVG文件
Linux主机运行RHEL5、Mono 1.9和Lighttpd(通过快速cgi与Mono对话)
我已经验证了SVG标记是在Linux服务器上干净地生成的;如果我用XSP2而不是Lighttpd运行web应用程序,页面将按预期工作。垃圾行是在生成SVG标记之后添加的(因此我不能在写出响应之前删除第一行)
有人知道这可能是什么原因吗?选项、想法和想法得到了极大的认可
谢谢
编辑:
根据我创建的可视化实体的不同,字符会有所不同,但对于给定的实体,字符保持不变。因此,如果我为对象A创建一个SVG visualtion,我将始终在第一行中获取字符串1f35作为垃圾。请更新到最近的Mono(2.4.2.3),然后重试。由于IIRC Red Hat没有用于Mono的RPM,您必须构建它并从源代码进行安装。1.9已经非常过时了。从那时起,Mono的所有部分都得到了改进。请更新到最近的Mono(2.4.2.3),然后重试。由于IIRC Red Hat没有用于Mono的RPM,您必须构建它并从源代码进行安装。1.9已经非常过时了。从那时起,Mono的所有部分都得到了改进。您的内容类型无效,应为“image/svg+xml”。您的内容类型无效,应为“image/svg+xml”。谢谢您的建议。我还没有能够得到一个更新的单声道版本的工作建设。此外,该页面在XSP2下正常运行——因此我倾向于相信它与lighttpd/fast cgi设置有关?(这两件事我都没有什么经验!)你可能是对的。不过,我很确定Mono中对快速cgi的支持也得到了改进,这就是为什么我建议首先更新的原因。对于编译mono,
/configure
应该列出任何缺失的或过时的依赖项。我将再次尝试构建mono的新版本-如果失败,我将看看计算部门是否有一台备用的Windows机器,我可以用我的Linux服务器换取:pThanks获得建议。我还没有能够得到一个更新的单声道版本的工作建设。此外,该页面在XSP2下正常运行——因此我倾向于相信它与lighttpd/fast cgi设置有关?(这两件事我都没有什么经验!)你可能是对的。不过,我很确定Mono中对快速cgi的支持也得到了改进,这就是为什么我建议首先更新的原因。对于编译mono,/configure
应该列出任何缺失或过时的依赖项。我将再次尝试构建mono的新版本-如果失败,我将看看计算部门是否有一台备用Windows机器,我可以用我的Linux服务器换取:pWell!不幸的是,它没有解决问题,但无论如何还是要谢谢你。发现得好!不幸的是,它并没有解决这个问题,不过还是要谢谢你。你每次都会收到不同的垃圾字符吗?还是同样的?Unicode BOM表?每次都有不同的垃圾字符吗?还是同样的?Unicode BOM?
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();
}
}