/// <summary> /// Constructor. /// </summary> /// <param name="format">The format for this output context.</param> /// <param name="messageStream">The message stream to write the payload to.</param> /// <param name="encoding">The encoding to use for the payload.</param> /// <param name="messageWriterSettings">Configuration settings of the OData writer.</param> /// <param name="writingResponse">true if writing a response message; otherwise false.</param> /// <param name="synchronous">true if the output should be written synchronously; false if it should be written asynchronously.</param> /// <param name="model">The model to use.</param> /// <param name="urlResolver">The optional URL resolver to perform custom URL resolution for URLs written to the payload.</param> internal ODataRawOutputContext( ODataFormat format, Stream messageStream, Encoding encoding, ODataMessageWriterSettings messageWriterSettings, bool writingResponse, bool synchronous, IEdmModel model, IODataUrlResolver urlResolver) : base(format, messageWriterSettings, writingResponse, synchronous, model, urlResolver) { Debug.Assert(messageStream != null, "messageStream != null"); try { this.messageOutputStream = messageStream; this.encoding = encoding; if (synchronous) { this.outputStream = messageStream; } else { this.asynchronousOutputStream = new AsyncBufferedStream(messageStream); this.outputStream = this.asynchronousOutputStream; } } catch { messageStream.Dispose(); throw; } }
protected override void Dispose(bool disposing) { try { if (this.messageOutputStream != null) { if (this.rawValueWriter != null) { this.rawValueWriter.Flush(); } // In the async case the underlying stream is the async buffered stream, so we have to flush that explicitely. if (this.asynchronousOutputStream != null) { this.asynchronousOutputStream.FlushSync(); this.asynchronousOutputStream.Dispose(); } // Dipose the message stream (note that we OWN this stream, so we always dispose it). this.messageOutputStream.Dispose(); } } finally { this.messageOutputStream = null; this.asynchronousOutputStream = null; this.outputStream = null; this.rawValueWriter = null; } base.Dispose(disposing); }