Я пытаюсь отправить XML-данные из файла в датчик, что должно получить XML и сделать из этого значения. У меня есть этот код, но я не знаю, работает ли он на самом деле.
У меня есть ответ от сервера, но действительно ли он получает эти данные из xml-файла? Я все еще новичок, поэтому я до сих пор не знаю.
Спасибо за любую помощь..
class Program
{
static void Main(string[] args)
{
WebRequest request = WebRequest.Create("http://192.168.254.20:5050/token");
request.Method = "POST";
string postData = @"C:UserslvrabelDesktopCrajsonsfinalsOutput.xml";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/xml";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
WebResponse response = request.GetResponse();
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
Console.WriteLine(postData);
Console.ReadKey();
reader.Close();
dataStream.Close();
response.Close();
}
}
Всего 2 ответа
Вам нужно прочитать ваш xml-файл, затем вы можете преобразовать его в байты, а затем вы можете отправить его на сервер.
byte[] xmlData= File.ReadAllBytes(@"C:UserslvrabelDesktopCrajsonsfinalsOutput.xml");
Это другой подход:
var xmlFile = @"C:UserslvrabelDesktopCrajsonsfinalsOutput.xml";
var client = new HttpClient { BaseAddress = new Uri("http://192.168.254.20:5050/")};
using(var content = new StringContent(File.ReadAllText(xmlFile), Encoding.UTF8, "text/xml"))
{
var result = await client.PostAsync("token", content);
var respnseText = await result.Content.ReadAsStringAsync();
}
(Примечание: если вы получаете доступ к одной и той же конечной точке службы с одинаковыми настройками несколько раз, вы можете повторно использовать экземпляр HttpClient для вызова различных методов обслуживания даже по потокам. Вот почему я не завернул его в предложение using
)
Если у вас возникли трудности с общением с сервисом, у вас могут возникнуть другие проблемы. Если вы не получите исключение, вы можете проверить свойства результата, чтобы узнать, вернула ли конечная точка службы (OK = 200) или какой-либо другой код результата. Вы можете найти подробности об этом. Вы также можете просто воспроизвести этот код в html + javascript, там вы можете более легко просмотреть трафик в браузере. Конечно, вы можете использовать сетевой сниффер, но это может быть намного сложнее.
[Обновить] Если вам действительно нужно передать имя файла как параметр GET, используйте следующее:
var xmlFile = @"C:UserslvrabelDesktopCrajsonsfinalsOutput.xml";
var uri = new Uri($"http://192.168.254.20:5050/token?content={xmlFile}", UriKind.Absolute);
using (var client = new HttpClient())
{
var result = await client.GetAsync(uri);
var respnseText = await result.Content.ReadAsStringAsync();
}