Hey,

(2011/04/15 6:31), Jonathan Pryor wrote:
> On Apr 13, 2011, at 4:06 AM, Atsushi Eno wrote:
>> Do you have any ideas how to solve this problem?
> Is it actually a problem? :-)

Sadly yes... it blocks us from creating useful WCF diagnostic xml logs.

> The reason I ask is that I vaguely recall testing the same behavior under 
> .NET at the time (circa 2002?), and .NET behaved the same way -- the stream 
> was not flushed.

I've never seen such a problem in .NET 3.0, 3.5 and 4.0. MS probably 
fixed it.

> Furthermore, the only solution I know of to fix this (or knew of circa 2002), 
> was to use a finalizer on TraceListener, which MSDN states TraceListener does 
> not provide.

As mentioned in my first post, the finalizer approach doesn't work. The 
Stream object could be already finalized before the TextWriter is disposed.

> Consequently, I believe that TraceListener is not supposed to flush the 
> stream at all, and if you really want the stream to be flushed you should set 
> Trace.AutoFlush=true, either programmatically or via .config file; MSDN 
> kindly provides the .config file snippet here:
>
>       
> http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelistener.aspx
>

Autoflush does not work for XmlWriterTraceListener, because its 
Dispose() calls XmlWriter.Close() which gives additional outputs 
(enclosing EndElements) to the TextWriter. Here again, the TextWriter 
could be GC-ed before XmlWriter is being disposed.

Though if there is no viable approach, I'd take another approach, to 
create my own critical-finalizable Stream, TextWriter and XmlWriter 
which refers each other. I wanted to confirm there is no easier way, as 
it is messy :/

Atsushi Eno

_______________________________________________
Mono-devel-list mailing list
Mono-devel-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-devel-list

Reply via email to