2015-09-01 29 views
0

我正在嘗試從SOAP SOAP Api讀取響應,並在foreach循環的第二次運行中得到Stream was not writable錯誤。在list ArrayList中的第一個值按預期工作,但第二個值在Stream was not writable行上表示Stream was not writable。我究竟做錯了什麼?流不可寫

 WebRequest webRequest = WebRequest.Create("https://www.api.com/v2.0/xml/"); 
     HttpWebRequest httpRequest = (HttpWebRequest)webRequest; 
     httpRequest.Method = "POST"; 
     httpRequest.ContentType = "text/xml; charset=utf-8"; 
     httpRequest.ProtocolVersion = HttpVersion.Version11; 
     httpRequest.Credentials = CredentialCache.DefaultCredentials; 
     Stream requestStream = httpRequest.GetRequestStream(); 

     StreamWriter streamWriter = new StreamWriter(requestStream, Encoding.ASCII); 

     StringBuilder soapRequest; 

     foreach (var bol in list) { 
     oRequest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; 
     oRequest = oRequest + "<file>"; 
     oRequest = oRequest + "<IntDocNumber>" + bol + "</IntDocNumber>"; 
     oRequest = oRequest + "</file>"; 

     soapRequest = new StringBuilder(oRequest); 
     streamWriter = new StreamWriter(requestStream, Encoding.ASCII); 
     streamWriter.Write(soapRequest.ToString()); 
     streamWriter.Close(); 

     //Get the Response  
     HttpWebResponse wr = (HttpWebResponse)httpRequest.GetResponse(); 
     StreamReader srd = new StreamReader(wr.GetResponseStream()); 
     string resulXmlFromWebService = srd.ReadToEnd(); 

     XmlDocument xml = new XmlDocument(); 
     xml.LoadXml(resulXmlFromWebService); 

     XmlNodeList xnList = xml.SelectNodes("/root/data/item"); 
     } 
+0

我會嘗試在foreach循環中聲明StreamWriter,如果可以的話您的解決方案 –

+0

我這樣做了。結果是一樣的 –

+1

您不能在多個請求中重複使用相同的請求對象。你只需要創建一個新的:) – Luaan

回答

3

所有HTTP通信發生在三個步驟:

  • 客戶機打開一個連接
  • 客戶端將其頭部和數據(在你的情況下,XML文件),並且結束輸入(在其中在關閉請求流情況)
  • 服務器發送其響應並關閉連接

所以,當你關閉連接時,你不能發送任何東西,因爲你必須等待服務器的回答。如果您想發送更多數據,請將代碼的開頭(在您創建新WebRequest的位置)移至For循環中。