所以我被要求有选项从数据库下载/创建一个XML文件。该表包含一个包含原始XML消息的列。用户需要能够保存XML文档以供查看。使用来自数据库的StreamWriter创建XML文档
因此,我在一个单独的程序中测试了我的下载,它可以工作,下载并完美地创建XML Doc,但由于某种原因它在实际程序中下载/创建。
所以我创建了一个存储的Proc来调用XML Message = QueueId。
该按钮位于一个DataGrid(我们使用Telerik的)
所以我使用的MemoryStream和一个StreamWriter写XML的文档。这里是我的代码:
private void DownloadXml()
{
try
{
MemoryStream stream = null;
if (grdMessages.SelectedItems.Count > 0)
{
foreach (GridDataItem item in grdMessages.SelectedItems)
{
int queueId = int.Parse(item["QueueId"].Text);
ibis_GetXmlTextResult result = Client.IbisGetClient(Endpoint).ibis_GetXmlText(queueId);
stream = new MemoryStream();
var r = result.XmlMessage.ToString();
//r = "Hello this is my file:)"; //This was only to test it if worked
using (StreamWriter writer = new StreamWriter(stream))
{
writer.Write(r);
writer.Flush();
}
WriteToPage(stream.ToArray(), "text/plain; charset=UTF-8", string.Format("{0}_ClientXml.xml", queueId));
//WriteToPage(stream.ToArray(), "text/xml; charset=UTF-8", "ClientXml.xml");
}
}
}
catch (Exception ex)
{
LogException(ex, "Demand Filter", "Well that didn't work. Check for error " + ex.StackTrace);
}
}
private void WriteToPage(byte[] data, string contentType, string fileName)
{
HttpResponse response = Page.Response;
response.Clear();
response.ClearContent();
response.ClearHeaders();
response.Buffer = true;
response.AddHeader("Content-Disposition", string.Format("Attachment; filename=\"{0}\"", fileName));
response.ContentType = contentType;
response.BinaryWrite(data);
response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
//response.End();
}
所以,我可以看到它得到的XML消息,但是当我检查控制台我得到这个错误,我得到这个错误: http://i.imgur.com/VppKLhG.png
编辑给出的错误:
错误:Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息。此错误的常见原因是,通过调用Response.Write(),响应筛选器,HttpModules或服务器跟踪已启用来修改响应时。
详细信息:错误解析'< Test xmlns =“”/> <!D'附近。
在Fiddler中,我可以看到原始的XML消息,但是1.)它不会下载,2)它在XML消息的末尾添加了一堆废话,这是我单独的程序不能做的。
能否请你错误的文本复制到岗位,而不是上传完整的图像? –
@NoelWidmer嗨,对不起,不想让这个帖子谋杀很久,编辑帖子 – Flipoff94
当然没问题。如果他们不必在另一个网站上的图像上搜索错误,那对每个人来说都会更容易。 –