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; }
    }
}