2009-10-07 67 views
0

我需要將原始XML發佈到站點並閱讀響應。使用下面的代碼,我不斷收到「未知文件格式」錯誤,我不知道爲什麼。如何在我的硬盤上寫入XML到GetRequestStream

  XmlDocument sampleRequest = new XmlDocument(); 
      sampleRequest.Load(@"C:\SampleRequest.xml"); 
      byte[] bytes = Encoding.UTF8.GetBytes(sampleRequest.ToString()); 

      string uri = "https://www.sample-gateway.com/gw.aspx"; 
      req = WebRequest.Create(uri); 
      req.Method = "POST"; 
      req.ContentLength = bytes.Length; 
      req.ContentType = "text/xml"; 

      using (var requestStream = req.GetRequestStream()) 
      { 
       requestStream.Write(bytes, 0, bytes.Length); 
      } 

      // Send the data to the webserver 
      rsp = req.GetResponse(); 

      XmlDocument responseXML = new XmlDocument(); 
      using (var responseStream = rsp.GetResponseStream()) 
      { 
       responseXML.Load(responseStream); 
      } 

我相當肯定我的問題是什麼/我如何寫requestStream所以..

我如何修改代碼,這樣我可以寫位於硬盤驅動器到一個XML請求流?

+0

哪一行代碼會拋出異常?什麼是異常的確切類型?也許發佈調用堆棧。 – Brannon 2009-10-07 15:47:27

+0

你在哪一行得到錯誤? – AnthonyWJones 2009-10-07 15:48:29

+0

在響應XML中找到錯誤。 – swolff1978 2009-10-07 15:59:18

回答

2

確定的,而不是做sampleRequest.ToString(),你應該使用sampleRequest.OuterXml,而且會做的魔力,你發送「System.Xml.XmlDocument」代替的Xml

XmlDocument sampleRequest = new XmlDocument(); 
    sampleRequest.Load(@"C:\SampleRequest.xml"); 
    //byte[] bytes = Encoding.UTF8.GetBytes(sampleRequest.ToString()); 
    byte[] bytes = Encoding.UTF8.GetBytes(sampleRequest.OuterXml); 
0

兩個事情:

首先,每當您嘗試診斷HTML響應問題時,都應該始終檢查響應流實際包含的內容。如果你在這種情況下,你會看到它包含System.Xml.XmlDocument,它會立即告訴你什麼是錯誤的。其次,在任何一種交易量的應用程序中,在將其放入響應流之前,您不打算將靜態XML文件加載到XmlDocument中;你的程序花費時間和內存構建你不需要的東西。 (這比你的情況更糟糕;你的方法不僅將XML解析爲DOM對象,而且還將它編碼爲UTF-8時,它會在內存中複製它的OuterXml屬性。是這樣做的嗎?)相反,您應該創建一個FileStream對象,並使用this answer中的技術之一將其複製到響應流中。

+0

我欣賞所有的信息 - 我仍然是一個綠色的程序員,所以如果我說一些愚蠢的東西,請原諒我,但是這裏說的是:我們不會從硬盤中加載文件,我們正在單獨構建它方法,但該方法將返回一個XmlDocument,你是說構建XmlDocument的方法應該返回除XmlDocument之外的其他東西嗎?在這種情況下,將XML放入流中的最佳方式是什麼? – swolff1978 2009-10-08 21:19:31

+0

哦,不,在內存中構建一個XmlDocument是非常酷的。你發佈的代碼是從磁盤加載XmlDocument,所以這就是我認爲你正在嘗試做的事情。如果你已經有了XmlDocument對象,我只需要將它的OuterXml屬性寫入響應流。 – 2009-10-08 22:17:34