Технология Microsoft ADO .NET

Создание и использование Web-сервиса

Разбить на страницы
Показывать лекцию целиком

Создание и использование Web-сервиса

Подготовка сервера IIS

Web-служба размещается на сервере IIS (Internet Information Services). При установке Microsoft Windows XP Professional (SP2) по умолчанию сервер IIS устанавливается не полностью и нам нужно завершить его комплектациюПри установке среды разработки Visual Studio. NET мастер предлагает предварительно установить IIS (с установочного диска системы).. Переходим в меню "Пуск \ Панель управления \ Установка и удаление программ". В категории "Установка компонентов Windows" выбираем пункт "Internet Information Services (IIS)", нажимаем кнопку "Состав", отмечаем галочками все компоненты. Затем вставляем установочный диск Windows XP и нажимаем кнопку "Далее". Установка занимает пару минут, полностью настроенный сервер IIS не имеет затененного флажка (рис. 14.1):

(рис 14.1) Установка сервера IIS

Скорее всего, у вас имеется частично установленный серверЕсли же вы установили его полностью, вам придется зарегистрировать библиотеку .NET Framework (см. далее в этой лекции "Проблема, связанная с переустановкой IIS").. Теперь можно приступать к разработке web-служб.

Создание web-сервиса

Рассмотрим создание web-службы, предоставляющей возможность получать и обновлять данные из базы Northwind MS SQL Server. Запускаем Visual Studio .NET, создаем новый проект, в списке шаблонов выбираем "ASP.NET Web Service", в строке "Location" вводим название web-сервиса "NorthwindService" (рис. 14.2):

(рис 14.2) Создание web-сервиса NorthwindService

Среда генерирует шаблон web-сервиса, который открывается в режиме дизайна (рис. 14.3). Сам по себе web-сервис не имеет пользовательского интерфейса, поэтому у него достаточно специфичный вид. Но в процессе разработки можно использовать визуальные средства студии, размещая на поверхности элементы управления или объекты. В этом смысле режим дизайна web-сервиса аналогичен панели компонент в обычных Windows-приложениях.

(рис 14.3) Шаблон web-сервиса

Файл web-сервиса имеет расширение .asmx. Переходим в окно Solution Explorer и переименовываем файл "Service1.asmx" в "DataNorthwind.asmx". Переключаемся в режим кода, нажимая на ссылку "click here to switch to code view" (или просто нажимая клавишу F7). Дополнительно изменяем название класса и конструктора. Разработчики Visual Studio .NET оставили тестовый метод web-сервиса Hello World, который возвращает ставшую классической строку "Hello World". Снимаем с него комментарии. Полностью листинг web-службы будет выглядеть теперь следующим образом:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
namespace NorthwindService
{
 /// <summary>
 /// Summary description for Service1.
 /// </summary>
 public class DataNorthwind : System.Web.Services.WebService
 {
   public DataNorthwind()
   {
    //CODEGEN: This call is required by the ASP.NET
    //Web Services Designer
    InitializeComponent();
   }
 #region Component Designer generated code
 //Required by the Web Services Designer 
 private IContainer components = null;
 /// <summary>
 /// Required method for Designer support - do not modify
 /// the contents of this method with the code editor.
 /// </summary>
 private void InitializeComponent()
 {
 }
 /// <summary>
 /// Clean up any resources being used.
 /// </summary>
 protected override void Dispose( bool disposing )
 {
   if(disposing  components != null)
  {
    components.Dispose();
  }
  base.Dispose(disposing);		
 }
 #endregion
 // WEB SERVICE EXAMPLE
 // The HelloWorld() example service returns the string Hello World
 // To build, uncomment the following lines then save and build the project
 // To test this web service, press F5
  [WebMethod]
  public string HelloWorld()
  {
   return "Hello World";
  }
 }
}

Компилируем сервис, нажимая кнопку F5. Среда генерирует отчет, содержащий описание сервиса, рекомендации, а также его методы и их тесты. Переходим по ссылке "HelloWorld" (рис. 14.4):

(рис 14.4) Отчет web-сервиса, генерируемый средой

Появляется окно, в котором можно протестировать результат метода, щелкнув на кнопку "Invoke" (рис. 14.5):

(рис 14.5) Тестирование метода HelloWorld

Метод возвращает строку "Hello World" в формате XML, она открывается в отдельном окне (рис. 14.6):

(рис 14.6) Результат выполнения метода

Вернемся к коду. При тестировании появлялась рекомендация (см. рис. 14.4) изменить пространство имен web-сервиса перед его публикацией. По умолчанию мастер подставляет пространство из шаблона:

http://tempuri.org/

Перед классом задаем собственное пространство имен и описание web-сервиса при помощи атрибутов Namespace и Desription:

[WebService(Namespace=
 "http://www.somesite.com/mywebservices",
 Description="Web-сервис для работы с базой данных Northwind")]
public class DataNorthwind :
 System.Web.Services.WebService
{	
...

Web-методы также обладают атрибутом "Description", с помощью которого можно задавать описание каждого метода:

[WebMethod (Description="Этот метод разработчики
 оставили в качестве примера.")]
public string HelloWorld()
{
	return "Hello World";
}

Снова компилируем проект. Теперь отчет стал более понятным (рис. 14.7):

(рис 14.7) Применение атрибутов Description

Приступим к созданию собственных методов. Переходим в режим дизайна, из вкладки Data окна Toolbox перетаскиваем объект SqlDataAdapter. В появившемся мастере Data Adapter Configuration Wizard настраиваем извлечение всех записей таблицы Customers базы данных Northwind. На поверхности появляются два объекта - sqlDataAdapter1 и sqlConnection1, они выглядят точно так же, как аналогичные объекты на панели компонент обычного Windows-приложения. Выделяем объект sqlDataAdapter1, в его окне Properties щелкаем по ссылке Generate Dataset. В появившемся окне оставляем предложенное название DataSet. У нас имеются все объекты для написания собственных web-методов. Если мы просмотрим в коде область Component Designer generated code, то обнаружим, что среда сгенерировала описание объектов ADO .NET в точности такое же, как и в обычном Windows-приложении. Добавляем методыЗдесь я снова буду писать названия методов этим ужасным translitom. в классе формы:

[WebMethod (Description="Метод для заполнения
 данными объекта DataSet")]
public DataSet ZapolnenieDannimi()
{
	sqlDataAdapter1.Fill(dataSet11);
	return dataSet11;
}

[WebMethod (Description="Метод для передачи
 изменений в базу данных")]
public bool PeredachaIzmeneniy(DataSet ds)
{
	if (ds.HasErrors)
		return false;
	sqlDataAdapter1.Update(ds);
	return true;
}

Параметр [WebMethod] является обязательным при создании web-методов, а атрибут Description - нет. Впрочем, его следует добавлять для удобства работы. Протестируем наш сервис. Переходим по ссылке к методу ZapolnenieDannimi (рис. 14.8):

(рис 14.8) Тестирование после добавления собственных методов

При извлечении метода - нажатии кнопки "Invoke" - на его странице появляется сообщение об ошибке:

System.Data.SqlClient.SqlException:
 Login failed for user 'F202406B87AB496\ASPNET'.

При настройке объекта DataAdapter для подключения к MS SQL Server я выбрал тип аутентификации Windows. Web-служба подключается, используя учетную запись "ASPNET", которая создается при установке Visual Studio .NET. Проблема заключается в том, что эта учетная запись не обладает полномочиями для подключения к базе данных Northwind. Поэтому при отладке и появляется сообщение об ошибке, где "F202406B87AB496" - имя моего локального компьютера. Если мы не хотим использовать аутентификацию SQL-сервера, нужно будет изменить права учетной записи "ASPNET". Запускаем SQL Server Enterprise Manager, раскрываем узел текущего сервера, на вкладке Security щелкаем правой кнопкой и выбираем New Login. В появившемся окне SQL Server Login Properties нажимаем кнопку обзора (_), в появившемся окне добавляем учетную запись "ASPNET", затем нажимаем "OK" (рис. 14.9):

(рис 14.9) Добавление пользователя "ASPNET"

Далее, на вкладке Server Roles отмечаем галочкой "Database Creators" (рис. 14.10). Эта роль предоставляет права создавать и изменять базы данных на сервере.

(рис 14.10) Определение роли пользователя "ASPNET"

На вкладке Database Access определяем, к какой именно базе данных будет иметь доступ пользователь "ASPNET". Отмечаем только базу Northwind (рис. 14.11):

(рис 14.11) Предоставления доступа к базе "Northwind"

Завершаем настройку учетной записи, нажимая "OK" в окне SQL Server Login Properties. Проверим снова web-сервис - метод ZapolnenieDannimi возвращает теперь содержимое таблицы Customers (рис. 14.12):

(рис 14.12) Выполнение метода "ZapolnenieDannimi"

В документе находится XSD-схема объекта DataSet, а также само содержимое в формате XML.

Мы завершили разработку web-сервиса.

Разработка приложения, использующего web-сервис

В качестве клиента, вызывающего web-методы, применим Windows-приложение. Создайте новый Windows-проект и назовите его "Test NorthwindWS". Добавляем на форму элементы управления DataGrid и Panel, свойствам Dock этих элементов устанавливаем значения "Fill" и "Bottom" соответственно.

На панели размещаем две кнопки, устанавливая им следующие свойства:

button1, свойствоЗначение
Name btnFill
Location 26; 16
Text Заполнить
button2, свойствоЗначение
Name btnUpdate
Location 122; 16
Size 144; 23
Text Передать изменения

Интерфейс готов. В окне Solution Explorer щелкаем правой кнопкой на узле "References" и в появившемся контекстном меню выбираем пункт "Add Web Reference_" (рис. 14.13):

(рис 14.13) Окно Solution Explorer

В появившемся окне Add Web Reference доступен просмотр всех web-служб. Поскольку наш сервис расположен на локальном компьютере, нажимаем на ссылку "Web services on the local machine". Далее снова переходим по ссылке "DataNorthwind" (рис. 14.14):

(рис 14.14) Окно Add Web Reference, просмотр web-служб

Появляется уже знакомый нам отчет, на котором можно просмотреть описание сервиса и его методов. В поле Web reference name можно ввести имя создаваемой ссылки. Мы оставляем предложенное название "localhost" и нажимаем кнопку "Add Reference" (рис. 14.15):

(рис 14.15) Добавление ссылки на сервис DataNorthwind

В окне Solution Explorer появилась папка Web Reference с узлом localhost. Дважды щелкаем на этом узле. В окне Object Browser мы можем просмотреть описание web-методов, предоставляемых сервисом (рис. 14.16):

(рис 14.16) Просмотр web-методов в окне Object Browser

Впрочем, поскольку у нас имеется всего три предельно простых метода, мы можем вернуться к коду. Подключаем пространство имен для получения доступа к добавленному сервису:

using TestNorthwindWS.localhost;

В классе формы создаем экземпляр myService:

DataNorthwind myService = new DataNorthwind();

В обработчиках кнопок "btnFill" и "btnUpdate" вызываем соответствующие web-методы:

private void btnFill_Click(object sender,
 System.EventArgs e)
{
	DataSet ds = myService.ZapolnenieDannimi();
	dataGrid1.DataSource = ds.Tables[0].DefaultView;
}

private void btnUpdate_Click(object sender, System.EventArgs e)
{
	DataSet ds = (DataSet)dataGrid1.DataSource;
	if(!myService.PeredachaIzmeneniy(ds))
	MessageBox.Show("Ошибка обновления",
	 "При передаче изменений возникла ошибка" );
}

Запускаем приложение. Мы можем просматривать и изменять содержимое таблицы Customers (рис. 14.17):

(рис 14.17) Готовое приложение TestNorthwindWS

Как работает наше приложение? Мы добавили ссылку на web-службу, аналогично добавлению обычной библиотеки. Не имеет значения, где эта служба находится. Далее мы просто создаем объект класса службы и вызываем соответствующие методы. При нажатии на кнопку "Заполнить" происходит обращение к серверу IIS, который, в свою очередь, обращается к MS SQL Server и получает данные для объекта DataSet. Наше приложение устанавливает полученный DataSet в качестве источника данных для элемента управления DataGrid. Аналогично выполняется метод, привязанный к кнопке "Передать изменения".

В программном обеспечении к курсу вы найдете приложение Test NorthwindWS (Code\Glava7\ TestNorthwindWS).

Расположение файлов web-сервиса

При создании Windows-приложений нам не приходится задумываться о местоположении наших файлов и проектов, об их взаимодействии со службами компьютера, - все достаточно просто. Имеется папка, в которой располагается проект, в нем есть папка "Debug" (или "Release"), где размещено скомпилированное приложение. Немного по-другому обстоят дела с web-службами. После создания проекта web-сервиса Northwind Service все рабочие файлы располагаются по умолчанию в каталоге "C(Имя системного диска):\Inetpub\wwwroot\NorthwindService" (рис. 14.18):

(рис 14.18) Файлы web-сервиса

В папке "bin" находится скомпилированный файл библиотеки динамической компоновки NorthwindService.dll. Файл Solution, по нажатию на который запускается среда Visual Studio .NET и открывается web-сервис в режиме разработки, расположен в каталоге "C:\Documents and Settings\Chingiz Kariev(Имя пользователя)\Мои документы\Visual Studio Projects\NorthwindService.sln" (рис. 14.19):

(рис 14.19) Файл Solution web-сервиса NorthwindService

Рабочие файлы web-сервиса, которые используются приложениями-клиентами (например, TestNorthwindWS), должны быть помещены в web-узел сервера IIS. Переходим в меню "Пуск \ Панель управления \ Администрирование \ Internet Information Services". В группе "Web-узел по умолчанию" мы видим папку "NorthwindService", в которой располагаются все рабочие файлы (рис. 14.20):

(рис 14.20) Сервер Internet Information Services (IIS)

При переходе по ссылке "Web services on the local machine" мы видели ссылку на сервис DataNorthwind только лишь потому, что папка сервиса уже находилась в каталоге сервера IIS. Откуда взялась эта папка? При создании нового проекта web-сервиса среда Visual Studio .NET автоматически помещает его файлы в директорию "C:\Inetpub\wwwroot". Сервер IIS сканирует эту директорию и при наличии подходящих файлов предоставляет соответствующие услуги web-сервиса.

В программном обеспечении к курсу вы найдете папку NorthwindService, скопированную из узла "C:\Inetpub\wwwroot". (Code\Glava7\ Northwind Service).

Создание пакета установки web-сервиса

Для переноса web-службы на другой компьютер достаточно разместить в его каталоге IIS (по умолчанию "C:\Inetpub\wwwroot") рабочие файлы. Это можно сделать непосредственно простым копированием, но лучше подготовить пакет установки. Где-нибудь в рабочей директории создаем папку "Пакет_установки" (у меня это "D:\Uchebnik\Code\Glava7") - в нее будем помещать файлы пакета установки. Запускаем Visual Studio .NET, создаем новый проект, в окне "New Project" переходим в категорию "Setup and Deployment Projects" и выбираем шаблон "Web Setup Project" (рис. 14.21):

(рис 14.21) Окно New Project. Создание пакета установки

В окне File System щелкаем правой кнопкой на папке "Web Application Folder", в появившемся меню выбираем "Add \ File" (рис. 14.22, А). Далее, в окне "Add Files" переходим в текущий каталог IIS, из папки "NorthwindService" добавляем следующие файлы (рис. 14.22, Б):

(рис 14.22) Добавление файлов веб-службы. А - Папка "Web Application Folder", Б - выделение файлов папки "NorthwindService"

Теперь нужно определить содержимое папки "bin". Щелкаем на ней правой кнопкой, снова переходим в меню "Add \ File" (рис. 14.23, А). В окне Add Files переходим в папку "bin", которая расположена в папке "NorthwindService", и добавляем следующие два файла (рис. 14.23, Б):

Все нужные файлы собраны. На панели инструментов Standart выбираем режим(рис 14.23) ("Release") отладки проекта, а затем компилируем его, нажимая сочетание клавиш Ctrl+Shift+B (или выбирая пункт главного меню "Build \ Build Solution"). Пакет установки готовБолее подробное описание оформления пакета установки вы можете найти здесь: http://www.intuit.ru/department/pl/visualcsharp/9/visualcsharp_9.html . Для переноса на другой компьютер будут нужны три файла, которые появились в папке "Release" (рис. 14.24):

(рис 14.24) Готовый пакет установки

Проделаем операцию установки на локальном компьютере. На сервере IIS у нас уже есть web-сервис NorthwindService, возникший в процессе его создания в среде Visual Studio .NET. Нам нужно его вначале удалить, а потом установить с помощью пакета установки. Переходим в папку "C:\Inetpub\wwwroot", выделяем папку, нажимаем кнопку "Delete" и... Появляется сообщение об ошибке (рис. 14.25):

(рис 14.25) Ошибка, возникающая при попытке удалить папку из каталога IIS

Причина ошибки заключается в том, что сервер IIS использует содержимое этой папки. Удалять папку следует с помощью утилиты администрирования сервера. Переходим в меню "Пуск \ Панель управления \ Администрирование", запускаем утилиту "Internet Information Services". Она предназначена для управленияПодробное описание работы с сервером IIS вы можете найти в курсе "Администрирование web-серверов в IIS" на сайте www.intuit.ru сервером IIS, расположенным на данном компьютере. Для удаления web-службы раскрываем узел локального компьютера, щелкаем правой кнопкой на заголовке "NorthwindService", в выпадающем меню выбираем "Все задачи \ Удалить web-узел серверных расширений" (рис. 14.26):

(рис 14.26) Удаление web-службы NorthwindService

После подтверждения удаления служба будет удалена из папки "C:\Inetpub\wwwroot". Для установки web-службы запускаем файл Setup.Exe, расположенный в папке "Пакет_установки". В процессе установки мастер предложит выбрать название создаваемой директории и порт подключения. Оставим эти значения по умолчанию. Завершив установкуВеб-сервис прописался, таким образом, в списке программ, для его последующего удаления можно использовать стандартное приложение "Установка и удаления программ"., запускаем утилиту Internet Information Services - в ней снова появился узел NorthwindService. Можно проверить его работу с помощью приложения TestNorthwindWS.

В программном обеспечении к курсу вы найдете папку Пакет_установки (Code\Glava7\Пакет_установки).

Проблема, связанная с переустановкой IIS

В процессе работы может потребоваться переустановить IIS с компьютера. Переходим в меню "Пуск \ Панель управления \ Установка и удаления программ", в категории "Установка компонентов Windows" снимаем галочку "Internet Information Services (IIS)" нажимаем кнопку "Далее". Сервер IIS будет удален с компьютера. Для его установки повторяем эти же действия, отмечая его галочкой, затем вставляем установочный диск "Windows XP" и снова нажимаем кнопку "Далее". После установки приступаем к созданию нового web-сервиса, и при попытке его создания возникает сообщение об ошибке (рис. 14.27):

(рис 14.27) Ошибка при создании web-сервиса после переустановки IIS

Дело в том, что новый IIS, если он устанавливается поверх Visual Studio. NET, не содержит регистрации библиотеки .NET Framework. Это нужно проделать вручную. Переходим "Пуск \ Все программы \ Microsoft Visual Studio .NET 2003 \ Visual Studio .NET Tools \ Visual Studio .NET 2003 Command Prompt". В появившемся окне вводим следующую команду:

aspnet_regiis /i

Через некоторое время регистрация завершается (рис. 14.28) и можно приступать к разработке web-служб.

(рис 14.28) Регистрация библиотеки .NET Framework

Изменение стандартного отчета

Основная задача web-служб - предоставление методов и данных. Они могут совсем не иметь пользовательского интерфейса, поскольку клиентское приложение все равно его не отобразит. Тем не менее при размещении в Интернете аскетичная страничка-отчет будет "лицом" web-сервиса, по крайней мере для разработчиков, которые будут его применять. Изменим немного стандартное оформление. Шаблон "DefaultWsdlHelpGenerator.aspx", по которому среда Visual Studio .NET генерирует отчеты, находится в каталоге "C:\WINDOWS\Microsoft.NET\ Framework\v1.1.4322\CONFIG". Поместим в этот каталог логотип "logoINTUIT.gif" (он находится в программном обеспеченииВы также можете получить этот логотип, сохранив главную страницу сайта www.intuit.ru к курсу: Code\Glava7\ logoINTUIT.gif). Для того чтобы не испортить шаблон в процессе экспериментирования, лучше сделать запасную копию. Открываем файл DefaultWsdlHelpGenerator.aspx при помощи студии, прокручиваем страницу почти до самого конца. В описании CSS изменяем цвет заголовка:

<style type="text/css">
  
...
.heading1 { <%#GetLocalizedText("Styleheading1")%>
 background-color: #ff9900; }
....      
  </style>

После тега "body" вставляем рисунок и ссылку:

<body>
<a href="http://www.intuit.ru/">
<img src="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\logoINTUIT.gif"
 border="0" width="285" height="52"
 alt="Интернет Университет информационных технологий">
</a>
...

Сохраняем страницу, запускаем web-сервис DataNorthwind, и теперь его отчет выглядит следующим образом (рис. 14.29):

(рис 14.29) Отчет web-сервиса DataNorthwind, созданный на основе измененного шаблона

Изменяя параметры CSS, можно задавать оформление текста, ссылок, а также внешний вид страницы. Отчеты всех web-сервисов, создаваемых в дальнейшем на данном компьютере, будут иметь соответствующий вид.

Страницы:

Создание и использование Web-сервиса

Подготовка сервера IIS

Web-служба размещается на сервере IIS (Internet Information Services). При установке Microsoft Windows XP Professional (SP2) по умолчанию сервер IIS устанавливается не полностью и нам нужно завершить его комплектациюПри установке среды разработки Visual Studio. NET мастер предлагает предварительно установить IIS (с установочного диска системы).. Переходим в меню "Пуск \ Панель управления \ Установка и удаление программ". В категории "Установка компонентов Windows" выбираем пункт "Internet Information Services (IIS)", нажимаем кнопку "Состав", отмечаем галочками все компоненты. Затем вставляем установочный диск Windows XP и нажимаем кнопку "Далее". Установка занимает пару минут, полностью настроенный сервер IIS не имеет затененного флажка (рис. 14.1):

(рис 14.1) Установка сервера IIS

Скорее всего, у вас имеется частично установленный серверЕсли же вы установили его полностью, вам придется зарегистрировать библиотеку .NET Framework (см. далее в этой лекции "Проблема, связанная с переустановкой IIS").. Теперь можно приступать к разработке web-служб.

Создание web-сервиса

Рассмотрим создание web-службы, предоставляющей возможность получать и обновлять данные из базы Northwind MS SQL Server. Запускаем Visual Studio .NET, создаем новый проект, в списке шаблонов выбираем "ASP.NET Web Service", в строке "Location" вводим название web-сервиса "NorthwindService" (рис. 14.2):

(рис 14.2) Создание web-сервиса NorthwindService

Среда генерирует шаблон web-сервиса, который открывается в режиме дизайна (рис. 14.3). Сам по себе web-сервис не имеет пользовательского интерфейса, поэтому у него достаточно специфичный вид. Но в процессе разработки можно использовать визуальные средства студии, размещая на поверхности элементы управления или объекты. В этом смысле режим дизайна web-сервиса аналогичен панели компонент в обычных Windows-приложениях.

(рис 14.3) Шаблон web-сервиса

Файл web-сервиса имеет расширение .asmx. Переходим в окно Solution Explorer и переименовываем файл "Service1.asmx" в "DataNorthwind.asmx". Переключаемся в режим кода, нажимая на ссылку "click here to switch to code view" (или просто нажимая клавишу F7). Дополнительно изменяем название класса и конструктора. Разработчики Visual Studio .NET оставили тестовый метод web-сервиса Hello World, который возвращает ставшую классической строку "Hello World". Снимаем с него комментарии. Полностью листинг web-службы будет выглядеть теперь следующим образом:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
namespace NorthwindService
{
 /// <summary>
 /// Summary description for Service1.
 /// </summary>
 public class DataNorthwind : System.Web.Services.WebService
 {
   public DataNorthwind()
   {
    //CODEGEN: This call is required by the ASP.NET
    //Web Services Designer
    InitializeComponent();
   }
 #region Component Designer generated code
 //Required by the Web Services Designer 
 private IContainer components = null;
 /// <summary>
 /// Required method for Designer support - do not modify
 /// the contents of this method with the code editor.
 /// </summary>
 private void InitializeComponent()
 {
 }
 /// <summary>
 /// Clean up any resources being used.
 /// </summary>
 protected override void Dispose( bool disposing )
 {
   if(disposing  components != null)
  {
    components.Dispose();
  }
  base.Dispose(disposing);		
 }
 #endregion
 // WEB SERVICE EXAMPLE
 // The HelloWorld() example service returns the string Hello World
 // To build, uncomment the following lines then save and build the project
 // To test this web service, press F5
  [WebMethod]
  public string HelloWorld()
  {
   return "Hello World";
  }
 }
}

Компилируем сервис, нажимая кнопку F5. Среда генерирует отчет, содержащий описание сервиса, рекомендации, а также его методы и их тесты. Переходим по ссылке "HelloWorld" (рис. 14.4):

(рис 14.4) Отчет web-сервиса, генерируемый средой

Появляется окно, в котором можно протестировать результат метода, щелкнув на кнопку "Invoke" (рис. 14.5):

(рис 14.5) Тестирование метода HelloWorld

Метод возвращает строку "Hello World" в формате XML, она открывается в отдельном окне (рис. 14.6):

(рис 14.6) Результат выполнения метода

Вернемся к коду. При тестировании появлялась рекомендация (см. рис. 14.4) изменить пространство имен web-сервиса перед его публикацией. По умолчанию мастер подставляет пространство из шаблона:

http://tempuri.org/

Перед классом задаем собственное пространство имен и описание web-сервиса при помощи атрибутов Namespace и Desription:

[WebService(Namespace=
 "http://www.somesite.com/mywebservices",
 Description="Web-сервис для работы с базой данных Northwind")]
public class DataNorthwind :
 System.Web.Services.WebService
{	
...

Web-методы также обладают атрибутом "Description", с помощью которого можно задавать описание каждого метода:

[WebMethod (Description="Этот метод разработчики
 оставили в качестве примера.")]
public string HelloWorld()
{
	return "Hello World";
}

Снова компилируем проект. Теперь отчет стал более понятным (рис. 14.7):

(рис 14.7) Применение атрибутов Description

Приступим к созданию собственных методов. Переходим в режим дизайна, из вкладки Data окна Toolbox перетаскиваем объект SqlDataAdapter. В появившемся мастере Data Adapter Configuration Wizard настраиваем извлечение всех записей таблицы Customers базы данных Northwind. На поверхности появляются два объекта - sqlDataAdapter1 и sqlConnection1, они выглядят точно так же, как аналогичные объекты на панели компонент обычного Windows-приложения. Выделяем объект sqlDataAdapter1, в его окне Properties щелкаем по ссылке Generate Dataset. В появившемся окне оставляем предложенное название DataSet. У нас имеются все объекты для написания собственных web-методов. Если мы просмотрим в коде область Component Designer generated code, то обнаружим, что среда сгенерировала описание объектов ADO .NET в точности такое же, как и в обычном Windows-приложении. Добавляем методыЗдесь я снова буду писать названия методов этим ужасным translitom. в классе формы:

[WebMethod (Description="Метод для заполнения
 данными объекта DataSet")]
public DataSet ZapolnenieDannimi()
{
	sqlDataAdapter1.Fill(dataSet11);
	return dataSet11;
}

[WebMethod (Description="Метод для передачи
 изменений в базу данных")]
public bool PeredachaIzmeneniy(DataSet ds)
{
	if (ds.HasErrors)
		return false;
	sqlDataAdapter1.Update(ds);
	return true;
}

Параметр [WebMethod] является обязательным при создании web-методов, а атрибут Description - нет. Впрочем, его следует добавлять для удобства работы. Протестируем наш сервис. Переходим по ссылке к методу ZapolnenieDannimi (рис. 14.8):

(рис 14.8) Тестирование после добавления собственных методов

При извлечении метода - нажатии кнопки "Invoke" - на его странице появляется сообщение об ошибке:

System.Data.SqlClient.SqlException:
 Login failed for user 'F202406B87AB496\ASPNET'.

При настройке объекта DataAdapter для подключения к MS SQL Server я выбрал тип аутентификации Windows. Web-служба подключается, используя учетную запись "ASPNET", которая создается при установке Visual Studio .NET. Проблема заключается в том, что эта учетная запись не обладает полномочиями для подключения к базе данных Northwind. Поэтому при отладке и появляется сообщение об ошибке, где "F202406B87AB496" - имя моего локального компьютера. Если мы не хотим использовать аутентификацию SQL-сервера, нужно будет изменить права учетной записи "ASPNET". Запускаем SQL Server Enterprise Manager, раскрываем узел текущего сервера, на вкладке Security щелкаем правой кнопкой и выбираем New Login. В появившемся окне SQL Server Login Properties нажимаем кнопку обзора (_), в появившемся окне добавляем учетную запись "ASPNET", затем нажимаем "OK" (рис. 14.9):

(рис 14.9) Добавление пользователя "ASPNET"

Далее, на вкладке Server Roles отмечаем галочкой "Database Creators" (рис. 14.10). Эта роль предоставляет права создавать и изменять базы данных на сервере.

(рис 14.10) Определение роли пользователя "ASPNET"

На вкладке Database Access определяем, к какой именно базе данных будет иметь доступ пользователь "ASPNET". Отмечаем только базу Northwind (рис. 14.11):

(рис 14.11) Предоставления доступа к базе "Northwind"

Завершаем настройку учетной записи, нажимая "OK" в окне SQL Server Login Properties. Проверим снова web-сервис - метод ZapolnenieDannimi возвращает теперь содержимое таблицы Customers (рис. 14.12):

(рис 14.12) Выполнение метода "ZapolnenieDannimi"

В документе находится XSD-схема объекта DataSet, а также само содержимое в формате XML.

Мы завершили разработку web-сервиса.

Разработка приложения, использующего web-сервис

В качестве клиента, вызывающего web-методы, применим Windows-приложение. Создайте новый Windows-проект и назовите его "Test NorthwindWS". Добавляем на форму элементы управления DataGrid и Panel, свойствам Dock этих элементов устанавливаем значения "Fill" и "Bottom" соответственно.

На панели размещаем две кнопки, устанавливая им следующие свойства:

button1, свойствоЗначение
Name btnFill
Location 26; 16
Text Заполнить
button2, свойствоЗначение
Name btnUpdate
Location 122; 16
Size 144; 23
Text Передать изменения

Интерфейс готов. В окне Solution Explorer щелкаем правой кнопкой на узле "References" и в появившемся контекстном меню выбираем пункт "Add Web Reference_" (рис. 14.13):

(рис 14.13) Окно Solution Explorer

В появившемся окне Add Web Reference доступен просмотр всех web-служб. Поскольку наш сервис расположен на локальном компьютере, нажимаем на ссылку "Web services on the local machine". Далее снова переходим по ссылке "DataNorthwind" (рис. 14.14):

(рис 14.14) Окно Add Web Reference, просмотр web-служб

Появляется уже знакомый нам отчет, на котором можно просмотреть описание сервиса и его методов. В поле Web reference name можно ввести имя создаваемой ссылки. Мы оставляем предложенное название "localhost" и нажимаем кнопку "Add Reference" (рис. 14.15):

(рис 14.15) Добавление ссылки на сервис DataNorthwind

В окне Solution Explorer появилась папка Web Reference с узлом localhost. Дважды щелкаем на этом узле. В окне Object Browser мы можем просмотреть описание web-методов, предоставляемых сервисом (рис. 14.16):

(рис 14.16) Просмотр web-методов в окне Object Browser

Впрочем, поскольку у нас имеется всего три предельно простых метода, мы можем вернуться к коду. Подключаем пространство имен для получения доступа к добавленному сервису:

using TestNorthwindWS.localhost;

В классе формы создаем экземпляр myService:

DataNorthwind myService = new DataNorthwind();

В обработчиках кнопок "btnFill" и "btnUpdate" вызываем соответствующие web-методы:

private void btnFill_Click(object sender,
 System.EventArgs e)
{
	DataSet ds = myService.ZapolnenieDannimi();
	dataGrid1.DataSource = ds.Tables[0].DefaultView;
}

private void btnUpdate_Click(object sender, System.EventArgs e)
{
	DataSet ds = (DataSet)dataGrid1.DataSource;
	if(!myService.PeredachaIzmeneniy(ds))
	MessageBox.Show("Ошибка обновления",
	 "При передаче изменений возникла ошибка" );
}

Запускаем приложение. Мы можем просматривать и изменять содержимое таблицы Customers (рис. 14.17):

(рис 14.17) Готовое приложение TestNorthwindWS

Как работает наше приложение? Мы добавили ссылку на web-службу, аналогично добавлению обычной библиотеки. Не имеет значения, где эта служба находится. Далее мы просто создаем объект класса службы и вызываем соответствующие методы. При нажатии на кнопку "Заполнить" происходит обращение к серверу IIS, который, в свою очередь, обращается к MS SQL Server и получает данные для объекта DataSet. Наше приложение устанавливает полученный DataSet в качестве источника данных для элемента управления DataGrid. Аналогично выполняется метод, привязанный к кнопке "Передать изменения".

В программном обеспечении к курсу вы найдете приложение Test NorthwindWS (Code\Glava7\ TestNorthwindWS).

Расположение файлов web-сервиса

При создании Windows-приложений нам не приходится задумываться о местоположении наших файлов и проектов, об их взаимодействии со службами компьютера, - все достаточно просто. Имеется папка, в которой располагается проект, в нем есть папка "Debug" (или "Release"), где размещено скомпилированное приложение. Немного по-другому обстоят дела с web-службами. После создания проекта web-сервиса Northwind Service все рабочие файлы располагаются по умолчанию в каталоге "C(Имя системного диска):\Inetpub\wwwroot\NorthwindService" (рис. 14.18):

(рис 14.18) Файлы web-сервиса

В папке "bin" находится скомпилированный файл библиотеки динамической компоновки NorthwindService.dll. Файл Solution, по нажатию на который запускается среда Visual Studio .NET и открывается web-сервис в режиме разработки, расположен в каталоге "C:\Documents and Settings\Chingiz Kariev(Имя пользователя)\Мои документы\Visual Studio Projects\NorthwindService.sln" (рис. 14.19):

(рис 14.19) Файл Solution web-сервиса NorthwindService

Рабочие файлы web-сервиса, которые используются приложениями-клиентами (например, TestNorthwindWS), должны быть помещены в web-узел сервера IIS. Переходим в меню "Пуск \ Панель управления \ Администрирование \ Internet Information Services". В группе "Web-узел по умолчанию" мы видим папку "NorthwindService", в которой располагаются все рабочие файлы (рис. 14.20):

(рис 14.20) Сервер Internet Information Services (IIS)

При переходе по ссылке "Web services on the local machine" мы видели ссылку на сервис DataNorthwind только лишь потому, что папка сервиса уже находилась в каталоге сервера IIS. Откуда взялась эта папка? При создании нового проекта web-сервиса среда Visual Studio .NET автоматически помещает его файлы в директорию "C:\Inetpub\wwwroot". Сервер IIS сканирует эту директорию и при наличии подходящих файлов предоставляет соответствующие услуги web-сервиса.

В программном обеспечении к курсу вы найдете папку NorthwindService, скопированную из узла "C:\Inetpub\wwwroot". (Code\Glava7\ Northwind Service).

Создание пакета установки web-сервиса

Для переноса web-службы на другой компьютер достаточно разместить в его каталоге IIS (по умолчанию "C:\Inetpub\wwwroot") рабочие файлы. Это можно сделать непосредственно простым копированием, но лучше подготовить пакет установки. Где-нибудь в рабочей директории создаем папку "Пакет_установки" (у меня это "D:\Uchebnik\Code\Glava7") - в нее будем помещать файлы пакета установки. Запускаем Visual Studio .NET, создаем новый проект, в окне "New Project" переходим в категорию "Setup and Deployment Projects" и выбираем шаблон "Web Setup Project" (рис. 14.21):

(рис 14.21) Окно New Project. Создание пакета установки

В окне File System щелкаем правой кнопкой на папке "Web Application Folder", в появившемся меню выбираем "Add \ File" (рис. 14.22, А). Далее, в окне "Add Files" переходим в текущий каталог IIS, из папки "NorthwindService" добавляем следующие файлы (рис. 14.22, Б):

(рис 14.22) Добавление файлов веб-службы. А - Папка "Web Application Folder", Б - выделение файлов папки "NorthwindService"

Теперь нужно определить содержимое папки "bin". Щелкаем на ней правой кнопкой, снова переходим в меню "Add \ File" (рис. 14.23, А). В окне Add Files переходим в папку "bin", которая расположена в папке "NorthwindService", и добавляем следующие два файла (рис. 14.23, Б):

Все нужные файлы собраны. На панели инструментов Standart выбираем режим(рис 14.23) ("Release") отладки проекта, а затем компилируем его, нажимая сочетание клавиш Ctrl+Shift+B (или выбирая пункт главного меню "Build \ Build Solution"). Пакет установки готовБолее подробное описание оформления пакета установки вы можете найти здесь: http://www.intuit.ru/department/pl/visualcsharp/9/visualcsharp_9.html . Для переноса на другой компьютер будут нужны три файла, которые появились в папке "Release" (рис. 14.24):

(рис 14.24) Готовый пакет установки

Проделаем операцию установки на локальном компьютере. На сервере IIS у нас уже есть web-сервис NorthwindService, возникший в процессе его создания в среде Visual Studio .NET. Нам нужно его вначале удалить, а потом установить с помощью пакета установки. Переходим в папку "C:\Inetpub\wwwroot", выделяем папку, нажимаем кнопку "Delete" и... Появляется сообщение об ошибке (рис. 14.25):

(рис 14.25) Ошибка, возникающая при попытке удалить папку из каталога IIS

Причина ошибки заключается в том, что сервер IIS использует содержимое этой папки. Удалять папку следует с помощью утилиты администрирования сервера. Переходим в меню "Пуск \ Панель управления \ Администрирование", запускаем утилиту "Internet Information Services". Она предназначена для управленияПодробное описание работы с сервером IIS вы можете найти в курсе "Администрирование web-серверов в IIS" на сайте www.intuit.ru сервером IIS, расположенным на данном компьютере. Для удаления web-службы раскрываем узел локального компьютера, щелкаем правой кнопкой на заголовке "NorthwindService", в выпадающем меню выбираем "Все задачи \ Удалить web-узел серверных расширений" (рис. 14.26):

(рис 14.26) Удаление web-службы NorthwindService

После подтверждения удаления служба будет удалена из папки "C:\Inetpub\wwwroot". Для установки web-службы запускаем файл Setup.Exe, расположенный в папке "Пакет_установки". В процессе установки мастер предложит выбрать название создаваемой директории и порт подключения. Оставим эти значения по умолчанию. Завершив установкуВеб-сервис прописался, таким образом, в списке программ, для его последующего удаления можно использовать стандартное приложение "Установка и удаления программ"., запускаем утилиту Internet Information Services - в ней снова появился узел NorthwindService. Можно проверить его работу с помощью приложения TestNorthwindWS.

В программном обеспечении к курсу вы найдете папку Пакет_установки (Code\Glava7\Пакет_установки).

Проблема, связанная с переустановкой IIS

В процессе работы может потребоваться переустановить IIS с компьютера. Переходим в меню "Пуск \ Панель управления \ Установка и удаления программ", в категории "Установка компонентов Windows" снимаем галочку "Internet Information Services (IIS)" нажимаем кнопку "Далее". Сервер IIS будет удален с компьютера. Для его установки повторяем эти же действия, отмечая его галочкой, затем вставляем установочный диск "Windows XP" и снова нажимаем кнопку "Далее". После установки приступаем к созданию нового web-сервиса, и при попытке его создания возникает сообщение об ошибке (рис. 14.27):

(рис 14.27) Ошибка при создании web-сервиса после переустановки IIS

Дело в том, что новый IIS, если он устанавливается поверх Visual Studio. NET, не содержит регистрации библиотеки .NET Framework. Это нужно проделать вручную. Переходим "Пуск \ Все программы \ Microsoft Visual Studio .NET 2003 \ Visual Studio .NET Tools \ Visual Studio .NET 2003 Command Prompt". В появившемся окне вводим следующую команду:

aspnet_regiis /i

Через некоторое время регистрация завершается (рис. 14.28) и можно приступать к разработке web-служб.

(рис 14.28) Регистрация библиотеки .NET Framework

Изменение стандартного отчета

Основная задача web-служб - предоставление методов и данных. Они могут совсем не иметь пользовательского интерфейса, поскольку клиентское приложение все равно его не отобразит. Тем не менее при размещении в Интернете аскетичная страничка-отчет будет "лицом" web-сервиса, по крайней мере для разработчиков, которые будут его применять. Изменим немного стандартное оформление. Шаблон "DefaultWsdlHelpGenerator.aspx", по которому среда Visual Studio .NET генерирует отчеты, находится в каталоге "C:\WINDOWS\Microsoft.NET\ Framework\v1.1.4322\CONFIG". Поместим в этот каталог логотип "logoINTUIT.gif" (он находится в программном обеспеченииВы также можете получить этот логотип, сохранив главную страницу сайта www.intuit.ru к курсу: Code\Glava7\ logoINTUIT.gif). Для того чтобы не испортить шаблон в процессе экспериментирования, лучше сделать запасную копию. Открываем файл DefaultWsdlHelpGenerator.aspx при помощи студии, прокручиваем страницу почти до самого конца. В описании CSS изменяем цвет заголовка:

<style type="text/css">
  
...
.heading1 { <%#GetLocalizedText("Styleheading1")%>
 background-color: #ff9900; }
....      
  </style>

После тега "body" вставляем рисунок и ссылку:

<body>
<a href="http://www.intuit.ru/">
<img src="C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG\logoINTUIT.gif"
 border="0" width="285" height="52"
 alt="Интернет Университет информационных технологий">
</a>
...

Сохраняем страницу, запускаем web-сервис DataNorthwind, и теперь его отчет выглядит следующим образом (рис. 14.29):

(рис 14.29) Отчет web-сервиса DataNorthwind, созданный на основе измененного шаблона

Изменяя параметры CSS, можно задавать оформление текста, ссылок, а также внешний вид страницы. Отчеты всех web-сервисов, создаваемых в дальнейшем на данном компьютере, будут иметь соответствующий вид.

Вернуться к учебному плану