我正在开发一个 asp.net 项目,我必须在服务器端动态创建一个 XML 文件。数据来自服务器,我必须将其发送给客户端作为对请求的响应。客户端 (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>