サーバー側でXMLファイルを動的に作成する必要があるasp.netプロジェクトに取り組んでいます。データはサーバーから取得され、リクエストへの応答としてクライアントに送信する必要があります。クライアント (silverlight) は応答を取得し、そのデータを使用して GUI コントロールにフィードします。今、私はこのエラーとデータのない空白のコントロールを取得しています:
906 Content-Length mismatch: Response Header indicated 192,822 bytes, but server sent 192,856 bytes.
これは基本的に、応答が実際にはヘッダーの内容よりも大きいことを示しています。Fiddler で応答をチェックして、XML ファイルが正しいことを確認したところ、XML の末尾にいくつかの html タグが見つかりました。もちろん、クライアント側では解析されず、コントロールは完全に空白です。
ここにコードがあります
...
MemoryStream ms = new MemoryStream();
//Use a writer to greate the XML
using (XmlWriter writer = XmlWriter.Create(ms))
{
writer.WriteStartDocument(); //Header
writer.WriteComment("Response");
{
writer.WriteStartElement("sfdata"); //<Root>
{
writer.WriteStartElement("dataPoint");
{
writer.WriteStartElement("ids");
foreach (int i in baseIndexes)
{
writer.WriteStartElement("sfId");
writer.WriteValue(i);
writer.WriteEndElement();
}
writer.WriteEndElement();
}
writer.WriteEndElement(); //<End dataPoint>
}
writer.WriteEndElement(); //closes <Root>
}
writer.WriteEndDocument();
writer.Close();
//Convert Memory Stream to Byte Array
byte[] data = ms.ToArray();
string xmlFileName = "OrdExp_" + DateTime.Today.Year.ToString() +
DateTime.Today.Month.ToString("00") +
DateTime.Today.Day.ToString("00");
//Creating the Context
this.Context.Response.Clear();
//Heads up browser, here comes some XML
this.Context.Response.ContentType = "text/xml";
this.Context.Response.AddHeader("Content-Disposition:",
"attachment;filename=" + HttpUtility.UrlEncode(xmlFileName));
//Set the size of the file so the progress bar reports that correctly
HttpContext.Current.Response.AddHeader("Content-Length",
data.Length.ToString());
this.Context.Response.BinaryWrite(data);
this.Context.ApplicationInstance.CompleteRequest();
ms.Flush();
ms.Close();
}
うまくいけば、私は括弧を見逃していませんでした。
ファイルを作成して Context.Response で返すコードはこれですべてです。私はそれを何度も経験しましたが、最後に余分な html タグを追加するものは何も見当たりませんが、私はこのようなことはあまり得意ではありません. だから私は何かが欠けているかもしれません。これらは、xml ファイルの最後にあるタグです。
</span>
</form>
</body>
</html>