public Message Read()
{
CheckDisposed();
ThrowReadException();
if(EndOfStreamReached)
{
return null;
}
Message message;
try
{
while((message = ReadImpl()) == Message.Empty)
{
// Void.
}
}
catch(Exception exc)
{
if(!exc.IsFatal())
{
ProcessReadException(exc);
}
throw;
}
EndOfStreamReached = message == null;
return message;
}