Клиентская часть

Лабораторная работа № 12

Создание клиентского приложения с использованием метода POST протокола HTTP

 

Сервис

Создайте Web-сервис, который по запросу пользователя будет выдавать текущую дату или комбинацию даты и времени. Для этого в среде разработки Visual Studio 2010 следует выполнить команду меню Файл | Создать проект | и в появившемся диалоговом окне Создать проект в поле Установленные шаблоны выбрать Visual Basic и Веб. В верхнем поле выбрать .NET Framework 2.0. В поле Шаблоны выделить значок Приложение веб-служб ASP.NET. В поле Имя следует указать наименование создаваемого проекта. Укажите имя MyService1 и щелкните ОК. После того, как все необходимые приготовления средой разработки будут сделаны, на основном рабочем поле появится страница с проектом MyService1. Как можно заметить, эта страница имеет наименование Servicel.asmx.vb, а ее содержимое полностью совпадает с содержимым подобной страницы проекта MyService, созданного в лабораторной работе №11. Ну что поделаешь. Так заложено в Visual Studio 2010.

Очевидно, что для реализации заданного сервиса в листинге Servicel.asmx.vb вместо функции HelloWorld необходимо задать функцию, реализующую поставленную задачу. Назовем эту функцию MyDate и опишем ее следующим образом:

Листинг 12.1

Public Function MyDate(ByVal ShowTime As Boolean) As String

If ShowTime Then

MyDate = Date.Now

Else

MyDate = Date.Today

End If

End Function

 

В объявлении функции указано, что она будет воспринимать параметр ShowTime логического типа Boolean. В том случае, если функции передано значение True, клиенту будет возвращено значение, в которое входит и текущая дата и время вызова функции. Для этого используется свойство Now, входящее в состав типа Date. Если же функция в качестве параметра получает значение False, то клиентскому приложению возвращается только дата, что производится при помощи свойства Today.

Выполнив замену функций в файле Servicel.asmx.vb, получим представление этого файла в виде, приведенном на рисунке 12.1.

Рис.12.1. Внешний вид страницы Servicel.asmx.vb с функцией MyDate

Создание Web-сервиса не явилось сложной задачей. Теперь протестируем его работу. После компиляции обратимся к нему из браузера, нажав клавишу F5. На рис. 12.2 приведен внешний вид Web-страницы, которая генерируется Web-сервером при попытке обращения к Web-сервису.

 

Рис.12.2. Внешний вид Web – страницы, соответствующей Web – сервису

После щелчка мышью на ссылке, указывающей на функцию MyDate, в браузере будет отображена Web- страница, предоставляющая доступ к этой функции. Внешний вид этой Web-страницы показан на рис. 12.3.

Рис.12.3. Web – страница, предоставляющая пользователю доступ к функции MyDate

На этой странице расположено поле ввода, в котором пользователь может указать значение параметра, передаваемого функции, и кнопка Запуск, при нажатии на которую этот параметр будет передан функции сервиса, и в браузер будет отправлен результат работы сервиса.

В поле текстового ввода необходимо внести значение параметра ShowTime. Кстати, наименование параметра также указано на странице, ря­дом с соответствующим полем ввода. Тип параметра указан в блоках кода для клиентских приложений.

Итак, мы знаем, что наша функция воспринимает логический параметр типа Boolean. Поэтому в поле ввода можно ввести значение True, что мы и сделаем. После того как искомое значение будет введено в текстовое поле и нажата кнопка Запуск,браузер отобразит Web-страницу с результатом работы функции сервиса. Внешний вид этой страницы показан на рис. 12.4.

Рис.12.4. Web-страница с результатом работы функции при ShowTime= True

Если же, перезапустив Web – сервис, ввести в поле ввода значение False и нажать кнопку Запуск, то получим результат, приведенный на рис.12.5.

Рис.12.5. Web-страница с результатом работы функции при ShowTime= False

Здесь необходимо заметить, что, как и в предыдущей лабораторной работе, результатом работы созданного Web – сервиса является XML – документ.

И так, констатируем, что тестирование вновь созданного сервиса прошло успешно. Теперь необходимо определиться с его размещением. Для упрощения проблемы выберем локальное размещение сервиса и клиента на одном компьютере, т.е. создадим архитектуру локальной информационной системы. Чтобы выполнить локальное размещение Web – сервиса, требуется вернуться к странице, приведенной на рисунке 12.1, и выполнить следующие настройки:

- В обозревателе решений два раза щелкнуть ЛКМ по строчке MyProject. Откроется закладка с названием проекта MyService1, приведенная на рисунке 12.6.

Рис.12.6. Внешний вид страницы MyService1

- На выбранной закладке в левом поле выбрать Веб, а в правом поле, используя полосу прокрутки, установить радиокнопку Использовать локальный веб–сервер IIS. В текстовом поле URL–адрес проекта: появится локальный URL–адрес http://localhost/MyService1.

- Щелкнуть ЛКМ по кнопке Создать виртуальный каталог.

- Закрыть закладку MyService1.

- Выполнить компиляцию проекта MyService1.

- Закрыть Visual Studio 2010.

Теперь можно приступить к разработке клиентского приложения, вызывающего данный сервис.

Клиентская часть

Пока что перед клиентом поставим задачу только запуска в работу нашего сервиса, без приема от него результата его работы. Пусть первое клиентское приложение использует метод POST протокола HTTP для передачи запроса Web – сервису.

Если обращаться к методуPOST,тоследует признать, что нет нужды создавать отдельное приложение, которое бы формировало HTTP-запросы по правилам этого метода. У нас уже есть такое приложение — обычный браузер. Достаточно лишь создать для него соответствующую Web-страницу. Это будет намного быстрее и проще, нежели разрабатывать отдельное при­ложение, которое должно будут самостоятельно создавать НТТР-запрос, отправлять его на сервер, получать ответ на языке XML и извлекать из него данные. Поэтому начнем с создания обычной Web-страницы.

Как известно, метод POST позволяет передавать данные, введенные пользователем в HTML-форме. Следовательно, нам придется на Web-странице создать форму, внешний вид которой приведен на рисунке 12.7.

Рис. 12.7. Клиентская Web – страница, работающая с методом POST

Так как параметр имеет логический тип, будет правильно создать группу из двух переключателей. Передаваемое значение может быть или True или False, и именно эти значения будет возвращать переключатель. Однако помимо значения параметра, необходимо передать Web-сервису и его наименование. Как известно, при передаче данных от браузера на сервер, они указываются в виде последовательности пар “имя=значение”, где перед знаком равенства указывается наименование органа ввода данных. Следовательно, для передачи правильной пары нам необходимо группу переключателей назвать ShowTime. В результате HTML-код клиентской Web-страницы, передающей информацию при помощи метода POST, будет выглядеть так, как это показано в листинге 12.2.

return false">ссылка скрыта

Листинг 12.2

<!DOCTIPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"

"http://www.w3.org/TR/htm14/strict.dtd">

<htm1>

<head>

<title> POST-клиент</title>

</head>

<body>

<form METHOD="POST"

ACTION="http://localhost/MyService1/Service1.asmx/MyDate">

<p>Отображать помимо даты еще и время?</p>

<p><input TYPE="RADIO" NAME="ShowTime" VALUE="true" CHECKED> Да

<input TYPE="RADIO" NAME="ShowTime" VALUE="false"> Нет </p>

<input TYPE="SUBMIT" VALUE="Подтвердить"

</form>

</body>

</htm1>

Ну а теперь, наконец-то, приступаем к созданию первого (и надеюсь не последнего в вашей жизни) клиента. Для этого набираем в Блокноте текст листинга 12.2, присваиваем полученному файлу имя clientpost с расширением html, выбираем Тип файла: Все файлы и сохраняем файл на рабочем столе.

Вот и все. Осталось дело за малым – проверить локальную информационную систему в работе. Для этого щелкаем на рабочем столе по ярлыку clientpost. На экране появляется Web – страница, приведенная на рис. 12.7. и соответствующая нашему клиенту. Щелкаем радиокнопку Да и нажимаем кнопку Подтвердить.На экране видим Web – страницу, подобную рисунку 12.4, но с текущими датой и временем.

Очевидно, что при взведенной радиокнопке Нети нажатии кнопки Подтвердить на экране можно увидеть только дату.

Вот теперь совсем всё!