所以我被要求有選項從數據庫下載/創建一個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
當然沒問題。如果他們不必在另一個網站上的圖像上搜索錯誤,那對每個人來說都會更容易。 –