Coś nie tak robię, tylko nie wiem co. Metoda jako zwrot daje XmlDocument. Niestety, jak podaję Content-Length to mi go obcina (o jakieś 6000 znaków):

        MD5 md5 = new MD5CryptoServiceProvider();
        object encoded_etag = Convert.ToBase64String(md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(xml.OuterXml)));

        Context.Response.AddHeader("Content-Length", System.Text.Encoding.UTF8.GetByteCount(xml.OuterXml).ToString());
        Context.Response.AddHeader("Age", "0");
        Context.Response.Cache.SetETag(encoded_etag.ToString());
        Context.Response.Cache.SetCacheability(HttpCacheability.Public);
        return xml;

EDIT:
Kombinując dalej napisałam coś takiego:

        byte[] utf8 = Encoding.Convert(Encoding.UTF8, Encoding.ASCII, Encoding.UTF8.GetBytes(xml.OuterXml));

        MD5 md5 = new MD5CryptoServiceProvider();
        object encoded_etag = Convert.ToBase64String(md5.ComputeHash(utf8));

        Context.Response.AddHeader("Content-Length", utf8.Length.ToString());
        Context.Response.AddHeader("Age", "0");
        Context.Response.Cache.SetETag(encoded_etag.ToString());
        Context.Response.Cache.SetCacheability(HttpCacheability.Public);
        
        return  xml;

I patrzę sobie pod debuggerem - utf8.length = 23499
Przeanalizowanie kilku ostatnich znaków wskazuje, że faktycznie xml mieści się w tej ilości znaków (ostatni tag zgadza się z tym co miałoby być).
Jednak kiedy wywołuję metodę, dostaję xmla obciętego... przez to też się nie parsuje. Kiedy wejdę w źródło strony, kopiuję całą zawartość do notepad++ i tu mi pokazuje, że znaków jest 23685.... (przy czym tekst jest obcięty!)
Za to gdy usunę nagłówek content-length dostaję całego xmla, a notepad++ mówi, że znaków jest w nim 29873... skąd się bierze ta różnica?

Nagłówki wyglądają ok:

Server Microsoft-IIS/5.1
Date Mon, 31 Jan 2011 1434 GMT
X-Powered-By ASP.NET
X-AspNet-Version 2.0.50727
Content-Length 23499
Age 0
Cache-Control public, no-store
Etag 0ARFlDN9gWylYXP/ljKKKg==
Content-Type text/xml; charset=utf-8

O co to może chodzić...?