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ć...?