2011-04-13 54 views
0

我正在使用下面的代碼向一個站點發送一個字節數組。爲什麼這個代碼即使在沒有互聯網連接的情況下也不會拋出異常?即使沒有連接,我也能夠獲得流並能夠寫入它。我期望它會在Stream postStream = request1.EndGetRequestStream(result)處拋出異常。任何人都有任何想法爲什麼它的行爲如此。即使沒有互聯網連接,HttpWebRequest也會流出

 private void UploadHttpFile() 
    { 
     HttpWebRequest request = WebRequest.CreateHttp(new Uri(myUrl)); 
     request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary); 


     request.UserAgent = "Mozilla/4.0 (Windows; U; Windows Vista;)"; 

     request.Method = "POST"; 
     request.UseDefaultCredentials = true; 

     request.BeginGetRequestStream(GetStream, request); 


    } 

    private void GetStream(IAsyncResult result) 
    { 
     try 
     { 
      HttpWebRequest request1 = (HttpWebRequest)result.AsyncState; 
      using (Stream postStream = request1.EndGetRequestStream(result)) 
      { 
       int len = postBody.Length; 
       len += mainBody.Length; 
       len += endBody.Length; 
       byte[] postArray = new byte[len + 1]; 
       Encoding.UTF8.GetBytes(postBody.ToString()).CopyTo(postArray, 0); 
       Encoding.UTF8.GetBytes(mainBody).CopyTo(postArray, postBody.Length); 
       Encoding.UTF8.GetBytes(endBody).CopyTo(postArray, postBody.Length + mainBody.Length); 
       postStream.Write(postArray, 0, postArray.Length); 
      } 
     } 

回答

2

我希望直到你寫完,此時它就能立即使用內容長度它的緩衝一切。如果你設置:

request.AllowWriteStreamBuffering = false; 

然後我懷疑它會失敗,至少當你寫入流。

順便說一句,你的postArray所需長度的計算似乎假設每個字符一個字節,它不會永遠是這樣......和你在postBody看起來像它的冗餘呼叫ToString。我不知道爲什麼你想在一個調用寫反正... 要麼你可以調用write三次:

byte[] postBodyBytes = Encoding.UTF8.GetBytes(postBody); 
postStream.Write(postBodyBytes, 0, postBodyBytes.Length); 
// etc 

(最好)只使用一個StreamWriter

using (Stream postStream = request1.EndGetRequestStream(result)) 
{ 
    using (StreamWriter writer = new StreamWriter(postStream) 
    { 
     writer.Write(postBody); 
     writer.Write(mainBody); 
     writer.Write(endBody); 
    } 
} 

不清楚爲什麼你初始化postArray時加入1至所需長度。您是否嘗試在數據末尾發送額外的「0」字節?

+0

「AllowWriteStreamBuffering」在WP7中不可用。我只能看到「AllowReadStreamBuffering」。 – Vaysage 2011-04-13 08:57:17

+0

@Vaysage:啊......在這種情況下,您可能無法找到答案,直到您嘗試獲得回覆。鑑於你在編寫代碼中並沒有做很多工作,這是否是一種特殊的困難? – 2011-04-13 09:02:39

+0

是的,我需要在最後發送一個零。你發佈的方法是最好的方式來做到這一點,我只會使用這種方法 – Vaysage 2011-04-13 09:07:25