HTTP, отправка xml данных на сервер

Отправка XML данных на сервер заключается в отправке текстовых данных в виде потока. Для отправки используются два класса WebClient и HttpWebRequest. Эти же классы могут применяться при запросе xml данных с сервера. Для отправки используем прикладной протокол HTTP.

Данные отправляются на сервер методом POST. Метод POST используется для запроса, указывая серверу, что содержит объект, включенный в тело запроса. POST метод служит для отправки произвольных данных, располагая их в конце сообщения. Методом POST можно отправлять текст и файлы.

Благодаря тому, что Silverlight поддерживается некоторой частью .NET Framework, можно создавать приложения практически любой сложности. Приложение может обрабатывать данные и отправлять их на сервер, для дальнейшей обработки или для сохранения в файлах и базе данных.

Валидация отправляемой структуры XML в исходниках построена на классе XmlReader. Заключаем чтение xml данных методом Read() в блок try ... catch и читаем всю строку. В случае нарушений в структуре XML исключения нам дают подробные объяснения в какой строке, позиции и теге обнаружена ошибка.

Листинг №1 Отправка xml данных WebClient

private void Button_Click(object sender, RoutedEventArgs e)
{
	// Отправляемые данные могут быть большого размера,
	// поэтому выбираем метод отправки POST.
	_webClient.OpenWriteAsync(new Uri(_urlRequest), "POST");
}
      
void _webClient_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
{
	try
	{
		// Получим доступ к выходному потоку
		Stream stream = e.Result;

		// Проверка xml на валидность
		using (StringReader sr = new StringReader(TextBox1.Text))
		{
			// Непосредственно проверка файла xml на валидность
			// используя функциональность класса XmlReader  
			XmlReader checkXml = XmlReader.Create(sr);

			// Разбор xml происходит при чтении загруженного потока
			while (checkXml.Read() == true) { }

			// После проверки xml файла записываем его в выходной поток и
			// отправляем xml данные.
			using (StreamWriter sw = new StreamWriter(stream))
			{
				sw.Write(TextBox1.Text);
			}
		}
	}
	catch (XmlException ex)
	{
		// XmlReader расскажет нам обо всех ошибках в xml структуре
		MessageBox.Show("Не валидный XML!" + "\n" + ex.Message);
	}
	catch (Exception ex)
	{
		MessageBox.Show(ex.Message);
	}
}

void _webClient_WriteStreamClosed(object sender, WriteStreamClosedEventArgs e)
{
	// Подтвердим успешную отправку
	if(e.Error == null) MessageBox.Show("Отправлено успешно!");
	else MessageBox.Show(e.Error.Message);
}

Листинг №2 Файл .cshtml скрипта принимающего xml данные

@{
    
    // Получая xml данные в виде потока, а не виде строки,
    // мы обходим бдительный валидатор запросов.
    // В этом случае мы берем на себя проверку входных данных.
    if(Request.Params["send"] != null )
    {
        StreamReader sr = new StreamReader(Request.InputStream);
        string s = sr.ReadToEnd();
        sr.Close();

        StreamWriter sw = new StreamWriter(Request.PhysicalApplicationPath + "test.xml");
        sw.Write(s);
        sw.Close();
    }
}

Исходники содержат два проекта веб-сайтов отправки данных в форме xml. В одном проекте используется класс HttpWebRequest, в другом WebClient. Строки кода подробно комментированы. Исходные коды созданы в среде программирования MS Visual Studio 2013 и протестированы в Visual Studio 2013 Express.

Файл исходника Размер Количество загрузок
silverlightsendxml.zip 80 КБайт 234
Яндекс цитирования Rambler's Top100 Яндекс.Метрика