В целом:
Примером простого способа размещения XML-данных и получения ответа (как строки) была бы следующая функция:
public string postXMLData(string destinationUrl, string requestXml)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
byte[] bytes;
bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
request.ContentType = "text/xml; encoding='utf-8'";
request.ContentLength = bytes.Length;
request.Method = "POST";
Stream requestStream = request.GetRequestStream();
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
HttpWebResponse response;
response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Stream responseStream = response.GetResponseStream();
string responseStr = new StreamReader(responseStream).ReadToEnd();
return responseStr;
}
return null;
}
В вашем конкретная ситуация:
Вместо:
request.ContentType = "application/x-www-form-urlencoded";
use:
request.ContentType = "text/xml; encoding='utf-8'";
Также удалите:
string postData = "XMLData=" + Sendingxml;
И замените:
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
на:
byte[] byteArray = Encoding.UTF8.GetBytes(Sendingxml.ToString());
Пример AlliterativeAlice очень помог мне. В моем случае, однако, сервер, с которым я разговаривал, не любил иметь одинарные кавычки вокруг utf-8
в типе контента. Он потерпел неудачу с общим "Server Error"
, и потребовалось несколько часов, чтобы выяснить, что ему не понравилось:
request.ContentType = "text/xml; encoding=utf-8";