C# HttpHandler-大型Xml-标记已损坏
我有一个C# HttpHandler-大型Xml-标记已损坏,c#,asp.net,xml,httphandler,C#,Asp.net,Xml,Httphandler,我有一个HttpHandler,它返回一大块XML(~400k行)。由于某种原因,数据在退出时被破坏。下面是一个简单的测试用例: public class SimpleTestCase : HttpHandlerBase { public override bool IsReusable { get { return false; } } protected override void HandleRequest(HttpContext cont
HttpHandler
,它返回一大块XML(~400k行)。由于某种原因,数据在退出时被破坏。下面是一个简单的测试用例:
public class SimpleTestCase : HttpHandlerBase
{
public override bool IsReusable
{
get { return false; }
}
protected override void HandleRequest(HttpContext context)
{
context.Response.ContentType = "application/xml";
context.Response.Write("<?xml version=\"1.0\"?>" + Environment.NewLine);
for(var i = 0; i < 400010; i++)
{
context.Response.Write("<amount>5</amount>" + Environment.NewLine);
}
}
}
请注意,关闭标记的开始部分(
我复制了您的代码,它似乎工作正常。您看到的问题似乎与浏览器有关。通过您的代码,我在Fiddler、Firefox和Chrome中获得了完整的响应,但Internet Explorer在正常情况下以及在源代码视图中都不会显示正确的响应。但是,如果您在Int中查看网络检查工具您可以看到整个响应都已收到
通过将xml内容封装在根标记中,从而使其成为有效的xml文档,Internet Explorer现在可以正确显示结果
public class SimpleTestCase : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/xml";
context.Response.Write("<?xml version=\"1.0\"?>" + Environment.NewLine);
context.Response.Write("<root>");
for (var i = 0; i < 400010; i++)
{
context.Response.Write("<amount>5</amount>" + Environment.NewLine);
}
context.Response.Write("</root>");
context.Response.Flush();
context.Response.End();
}
public bool IsReusable
{
get { return false; }
}
}
公共类SimpleTestCase:IHttpHandler
{
公共void ProcessRequest(HttpContext上下文)
{
context.Response.ContentType=“应用程序/xml”;
context.Response.Write(“+Environment.NewLine”);
context.Response.Write(“”);
对于(变量i=0;i<400010;i++)
{
context.Response.Write(“5”+Environment.NewLine);
}
context.Response.Write(“”);
context.Response.Flush();
context.Response.End();
}
公共布尔可重用
{
获取{return false;}
}
}
神秘。看起来像是框架中的一个bug。尝试每X行刷新一次响应(比如500或1000)…响应。如果我记得刷新correctly@MatthewMartin-谢谢,但没有骰子。每写200次就刷新一次,但仍然会出现这种奇怪的行为。这个错误是否更早存在?(现在已经消失了?)浏览器可能正在缓存旧的错误版本的文件。问题很好,但遗憾的是没有。将字符串输出更改为6
,以确保浏览器没有缓存。有趣的是……我在webdev、vs2010rtm、.net 4.0上重制了该错误。我猜TextWriter或它所依赖的类对于大流有错误。我查看了参考资料Source代码——它在Write()中进行了大量的幕后运算。这似乎是浏览器的问题。我可以在Fiddler上看到正确的位。奇怪的是,浏览器没有正确显示数据。
public class SimpleTestCase : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/xml";
context.Response.Write("<?xml version=\"1.0\"?>" + Environment.NewLine);
context.Response.Write("<root>");
for (var i = 0; i < 400010; i++)
{
context.Response.Write("<amount>5</amount>" + Environment.NewLine);
}
context.Response.Write("</root>");
context.Response.Flush();
context.Response.End();
}
public bool IsReusable
{
get { return false; }
}
}