2013-05-22 24 views
1

我正在嘗試將XML發送到URL並讀取響應,但響應每次都會回來。我認爲這是因爲它被異步處理,所以當我閱讀響應時,接收代碼沒有機會完成。在Javascrpt我會用在代碼後面執行同步xmlhttp請求

xmlhttp.Open("POST", url, false); 

同步發送的請求。我怎樣才能在C#中實現它?

我的代碼是目前

HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url); 
objRequest.Credentials = CredentialCache.DefaultCredentials; 
objRequest.Method = "POST"; 
objRequest.ContentType = "text/xml"; 
Stream dataStream = objRequest.GetRequestStream(); 
byte[] bytes = new byte[UpliftJobXMLString.Length * sizeof(char)]; 
System.Buffer.BlockCopy(UpliftJobXMLString.ToCharArray(), 0, bytes, 0, bytes.Length); 
dataStream.Write(bytes, 0, bytes.Length); 
dataStream.Close(); 
HttpWebResponse response = (HttpWebResponse)objRequest.GetResponse(); 
System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream()); 
string respString = System.Web.HttpUtility.HtmlDecode(sr.ReadToEnd()); //always empty 

感謝

回答

1

我不認爲你的問題與同步/異步操作有關。您的代碼將字符串轉換爲字節數組

byte[] bytes = new byte[UpliftJobXMLString.Length * sizeof(char)]; 
System.Buffer.BlockCopy(UpliftJobXMLString.ToCharArray(), 0, bytes, 0, bytes.Length); 

與Unicode編碼(每字符2個字節)類似。

參見編碼

string UpliftJobXMLString = "abcÜ"; 

byte[] bytesASCII = Encoding.ASCII.GetBytes(UpliftJobXMLString); 
byte[] bytesUTF8 = Encoding.UTF8.GetBytes(UpliftJobXMLString); 
byte[] bytesUnicode = Encoding.Unicode.GetBytes(UpliftJobXMLString); 

因此之間的差異,無論是內容編碼的設置爲Unicode或使用其他編碼。前者;

objRequest.ContentType = "text/xml; charset=utf-8"; 
+1

謝謝,這解釋了很多。 Encoding.UTF8對它進行排序。 –

2

我相當肯定,這不是一個異步的問題。你有沒有檢查過sr.ReadToEnd()返回HtmlDecode之前?

此外,您應該檢查服務器是否正在返回您期望的返回結果。檢查響應狀態碼和狀態描述。如果你的服務器拋出一個內部服務器異常(500)或類似的東西,你讀取的響應字符串會變空,因爲響應的內容首先不會被服務器發送。