1

XML を URL に送信して応答を読み取ろうとしていますが、毎回空の応答が返されます。これは、非同期に処理されているため、受信コードが応答を読み取るまでに完了する機会がなかったためだと思います。Javascriptで私は使用します

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

ありがとう

4

2 に答える 2

1

あなたの問題は同期/非同期操作に関連しているとは思いません。文字列をバイト配列に変換するコード

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

Unicode エンコーディング (1 文字あたり 2 バイト) に似ています。

エンコーディングの違いを見る

string UpliftJobXMLString = "abcÜ";

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

したがって、content-encoding を unicode に設定するか、別のエンコーディングを使用してください。例えば;

objRequest.ContentType = "text/xml; charset=utf-8";
于 2013-05-22T11:59:28.630 に答える