Массивы всех приведенных выше типов данных также допустимы. Отметим, также, что маршализуются только открытые свойства и поля типов class и struct.

Использование служб Web

Теперь, когда мы знаем, как создавать службы Web, пришло время разобраться, как они используются. Чтобы сделать это, необходимо создать в коде класс прокси, который знает, как общаться с заданной службой Web. Любые обращения из кода к службе Web будут проходить через этот прокси, который выглядит идентично службе Web, создавая в коде иллюзию, что имеется локальная копия службы Web. В реальности существует большой объект коммуникации HTTP, но мы защищены от деталей. Для этого существуют два способа. Можно пользоваться либо утилитой командной строки WSDL.exe, либо пунктом меню Add Web Reference в VS.NET.

При использовании утилиты WSDL.exe создается файл .cs, содержащий класс прокси на основе описания WSDL службы Web. Мы определяем это с помощью URL, например:

WSDL http://localhost/PCSWebSrv1/Service1.asmx?WSDL

Для примера из последнего раздела эта утилита создаст файл с именем Service1.cs класса прокси. Класс называется по имени cлужбы Web, в данном случае Service1, и будет содержать методы, которые вызывают идентично названные методы службы. Чтобы использовать этот класс, мы просто добавляем файл .cs, созданный для проекта, и используем следующий код:

Service1 myService = new Service1();

String result = myService.CanWeFixIt();

По умолчанию созданный класс будет помещен в корневое пространство имен, поэтому не нужен никакой оператор using, но можно определить для использования другое пространство имен с помощью параметра командной строки /n<namespace> утилиты WSDL.exe.

Эта техника хорошо работает, но может оказаться неудобным непрерывно переделывать код, если служба разрабатывается и постоянно изменяется. Конечно, можно было бы делать это в режиме сборки проекта, чтобы автоматически обновлять созданный прокси перед каждой компиляцией, но существует способ лучше.

Мы проиллюстрируем его в новом приложении Web с именем PCSWebClient1, создавая клиента для примера из последнего раздела. В теле формы на созданной странице .aspx необходимо заменить существующее объявление form на следующий код:

<form method='post' runat='server'>

 <asp:Label Runat='server' ID='resultLabel' />

 <br>

 <asp:Button Runat='server' ID='triggerButton' Text='Invoke CanWeFixIt()' />

</form>

Соединим обработчик события нажатия кнопки со службой Web. Для начала добавим в проект ссылку на службу Web. Чтобы сделать это, щелкнем правой кнопкой мыши на приложении в Solution Explorer и выберем пункт Add Web Reference… В появившемся окне введем URL файла .vsdisco службы Web:

Здесь можно следовать по ссылкам справа, чтобы получить те же самые описания с границы Web службы, которые мы видели в предыдущем разделе, и добавить ссылку с помощью кнопки Add Reference Нажатие на эту кнопку приведет к следующим изменениям в Solution Explorer:

Папка, содержащая нашу ссылку Web, называется по имени сервера, где расположена служба, в данном случае — localhost. Это также пространство имен, на которое необходимо ссылаться, чтобы использовать класс прокси, поэтому имеет смысл переименовать папку, что можно сделать с помощью щелчка правой кнопкой мыши на папке. Если переименовать эту папку в myWebService и добавить инструкцию using в код…

using PCSWebClient1.myWebService;

…то тогда можно будет использовать службу в нашем классе.

Добавим обработчик событий к кнопке на форме с помощью следующего кода:

protected void triggerButton_Сlick(object sender, System.EventArgs e) {

 Service1 myService = new Service1();

 resultLabel.Text = myService.CanWeFixIt();

}

Нажатие кнопки во время выполнения приложения приведет к выводу CanWeFixIt() в окне браузера.

Служба Web может впоследствии измениться, но с помощью такого метода можно просто сделать щелчок правой кнопкой мыши на ссылке Web в проводнике сервера и выбрать Update Web Reference. Это создаст для нас новый класс прокси.

Расширение примера заказа помещения для проведения мероприятий

Теперь, когда мы знакомы с основами создания и использования служб Web, давайте применим наши знания, расширив приложение заказа помещения для проведения мероприятий из предыдущей главы. В частности, извлечем детали доступа к базе данных из приложения и поместим их в службу Web. Эта служба Web имеет два метода:

□ GetData(), который будет возвращать объект DataSet, содержащий все три таблицы базы данных PCSWebApp3.

□ AddEvent(), добавляющий событие и возвращающий обновленную версию DataSet, которая включает изменение

Кроме того, мы создадим службу Web, помня о некоторых приемах сокращения нагрузки из предыдущей главы. В частности, мы будем хранить DataSet на уровне приложения в приложении службы Web. Это означает, что несколько запросов данных не потребуют работы дополнительных запросов к базе данных. Данные в этом DataSet уровня приложения обновятся, когда в базу данных добавятся новые данные. Это означает, что изменения, сделанные в базе данных другими средствами, такими как редактирование вручную, не будут отражаться в этом DataSet. Тем не менее, до тех пор, пока мы знаем, что наша служба Web является единственным местом с прямым доступом к данным, нам не о чем беспокоиться.

Служба Web заказа помещения для проведения мероприятий

Создайте новый проект службы Web в VS.NET с именем PCSWebSrv2. Для начала добавим код в обработчик Application_Start() в global.asax. Мы хотим загрузить все данные из PCSWebApp3.mdb в множество данных и сохранить его. Это будет по большей части включать код, с которым мы знакомы, так как перенос базы данных в

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату