Datta är egentligen inte in webservice men hittade inget bättre forum. Problemet ligger väl här >Problemet ligger väl här testat detta? >testat detta? Det finns ingen BOM med i filen men det fungerar ändå inte. Det verkar skumt... BOM skall inte finnas mitt i en dataström (efter content=) Har du testat att använda ASP.NET AJAX istället och göra din XML-processering i en vanlig page method?BOM
Jag använder ett System.Net.HttpWebReqeust objekt för att skicka data via http.
Problemet är att jag får med BOM (Byte Order Mark) i strömmen.
Koden ser ut så här:
<code>
HttpWebRequest request = WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
StreamWriter stream = new StreamWriter(request.GetRequestStream());
stream.WriteLine("contents=");
stream.Flush();
XmlWriter xml = XmlWriter.Create(stream);
xml.WriteStartElement(...)
...
xml.Flush();
stream.Close();
</code>
Mottagaren säger att det kommer ett BOM mellan "content=" och xml taggen.
Har provat att explicit stänga av BOM genom att göra
<code>
XmlWriterSettings xmlsettings = new XmlWriterSettings();
xmlsettings.Encoding = new Text.UTF8Encoding(false);
XmlWriter xml = XmlWriter.Create(stream, xmlsettings);
</code>
men det gör ingen skillnad.Sv: BOM
request.GetRequestStream());
Som läser byte för byte utan hänsyn till någon BOM.
Du kan ju testa att explicit hoppa över BOM men när du läser i stället.
Om det du läser är xml, då ska du på liknande sätt som med XmlWriterSettings
använda Xml<b>Reader</b>Settings när du läser av inkommande ström.
Om inte det håller kan du skriva en egen klass som ärver från IO.Stream,
och där överrida dess Read() metod för att titta på, och eventuellt skippa BOM.Sv:BOM
>request.GetRequestStream());
>Som läser byte för byte utan hänsyn till någon BOM.
Requst syftar på httpRequest vilket innebär att jag skriver till strömmen.
>Du kan ju testa att explicit hoppa över BOM men när du läser i stället.
Jag skriver request:en. Kan inte påverka mottagaren.Sv:BOM
StreamWriter stream = new StreamWriter(request.GetRequestStream(), Encoding.UTF8);Sv: BOM
>StreamWriter stream = new StreamWriter(request.GetRequestStream(), Encoding.UTF8);
Nej men skall göra det, tack.
Det jag har provat är att först skapa hela texten i en fil för att sen skicka hela filen. Det finns ingen BOM med i filen men det fungerar ändå inte.Sv:BOM
är du <b>absolut</b> säker på detta?Sv: BOM
Jag skulle föreslå att du testar följande ändringar:
1) Skapa StreamWritern med en new Text.UTF8Encoding(false) eftersom det är denna encoding som XmlWritern använder om den skapas med TextWriter konstruktorn.
2) Pröva stream.Write("content=") istf WriteLine om det är radbrytningen som kufar till det.
3) Prova att skippa Xml-deklarationen genom att sätta XmlWriterSettings.OmitXmlDeclaration = false.
Sen kan man fråga sig varför mottagaren inte hanterar BOM:en när den väl blivit identifierad...Sv:BOM
utan i början på en ström/en fil om det är Unicode. (UTF-8 måste inte ha det).
Att detta sparas som en fil kan ju vara en del av förklaringen. Sv: BOM