代码之家  ›  专栏  ›  技术社区  ›  Shrike

如何在ASP.NET中向客户端发送大型XML。NET有效?

  •  3
  • Shrike  · 技术社区  · 17 年前

    HttpContext上下文-当前HttpContext。

    简单的解决方案:

    context.Response.Write(xmlResponse.OwnerDocument.OuterXml);
    

    但是当XML真的很大时,我们可以在那一行得到OutOfMemoryException。 调用堆栈看起来像:

       at System.String.GetStringForStringBuilder(String value, Int32 startIndex, Int32 length, Int32 capacity)
       at System.Text.StringBuilder.GetNewString(String currentString, Int32 requiredLength)
       at System.Text.StringBuilder.Append(Char value)
       at System.IO.StringWriter.Write(Char value)
       at System.Xml.XmlTextWriter.InternalWriteEndElement(Boolean longFormat)
       at System.Xml.XmlTextWriter.WriteFullEndElement()
       at System.Xml.XmlElement.WriteTo(XmlWriter w)
       at System.Xml.XmlElement.WriteContentTo(XmlWriter w)
       at System.Xml.XmlElement.WriteTo(XmlWriter w)
       at System.Xml.XmlElement.WriteContentTo(XmlWriter w)
       at System.Xml.XmlElement.WriteTo(XmlWriter w)
       at System.Xml.XmlDocument.WriteContentTo(XmlWriter xw)
       at System.Xml.XmlDocument.WriteTo(XmlWriter w)
       at System.Xml.XmlNode.get_OuterXml()
    

    我会写一些这样的代码:

    HttpWriter writer = new HttpWriter(context.Response);
    XmlTextWriter xmlWriter = new XmlTextWriter(writer);
    xmlResponse.OwnerDocument.WriteTo(xmlWriter);
    

    但问题是HttpWriter的构造函数是内部的!HttpContext在Write方法内部使用HttpWriter。

    3 回复  |  直到 17 年前
        1
  •  1
  •   John Saunders    17 年前

    我会直接回应。输出流

    XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, 
    System.Text.Encoding.UTF8);  
    
        2
  •  3
  •   Glennular    17 年前
    xmlResponse.OwnerDocument.Save(Response.Output);
    
        3
  •  0
  •   Gregory A Beamer    17 年前

    您可以通过读取文件几行,然后冲洗、重复和冲洗来创建缓冲区。这可以让你通过OutOfMemory异常,或者应该。

    但如果这些是巨大的XML文件,使用HttpResponse和“写入”不是最好的选择。最好是创建、链接和允许其他东西。NET响应对象,用于将文件传递给用户。因此,我会认真考虑重新思考您正在设计的架构。也许文件传输web服务可能更适合传输这些大文件?只是想发表一些想法。