I have an HTTP Handler that is binding an XmlTextWriter
instance to Response.Output
like so...
Sub GenerateXml(ByRef Response As HttpWebResponse)
Using Writer As New XmlTextWriter(Response.Output)
' Build XML
End Using
End Sub
And now I also want the same XML to be saved to the local hard drive (in addition to being streamed to the response). How can I do it?
Things I have tried
1) The obvious, copying the Response.OutputStream to a new FileStream...
Sub GenerateXml(ByRef Response As HttpWebResponse) Using Writer As New XmlTextWriter(Response.Output) Build XML Here End Using // Also tried this inside the Using, with and without .Flush() CopyStream(Response.OutputStream, File.Create("C:\test.xml")) End Sub Sub CopyStream(ByRef Input As Stream, ByRef Output As Stream) Dim Buffer(1024) As Byte Dim Read As Integer Using Input Using Output While (Read = Input.Read(Buffer, 0, Buffer.Length)) > 0 Output.Write(Buffer, 0, Read) End While End Using End Using End Sub
I get errors like "Method not supported" and "NullReference"
2) Using a Memory Stream and then copying it...
Using Memory As New MemoryStream()
Using Writer As New XmlTextWriter(Memory, Encoding.UTF8)
Build XML Here
End Using
// Tried outside of the Using, with and without Flush()
CopyStream(Memory, Response.OutputStream)
CopyStream(Memory, File.Create("C:\test.xml"))
End Using
I get errors like "Cannot access a closed Stream."
Why is something so simple such a PITA?!
Response.TransmitFile()
? – Josh Stodola