Web-службы
Создание самой Web-службы
- Выполните команду File/Add/New Web Site и заполните окно мастера создания проекта Web-службы в соответствии с рисунком
Мастер создаст заготовку проекта приложения Web-службы, в которой застраничный файл ( CodeBehind ) будет выглядеть так
using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Service : System.Web.Services.WebService { public Service () { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public string HelloWorld() { return "Hello World"; } }Листинг 19.2. Код заготовки застраничного файла App_Code/Service.cs Web-службы
Метод HelloWorld() сгенерирован мастером автоматически точно также, как и дежурное имя службы - файл Service.cs.
- Замените метод HelloWorld() на следующий код
using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Service : System.Web.Services.WebService { public Service () { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] public string Hello(string strInput) { return "Приветствуем Вас, наш дорогой\n" + strInput; } }Листинг 19.3. Модифицированный код застраничного файла App_Code/Service.cs Web-службы
- Обязательно сохраните!!! внесенные изменения на диск, поскольку все дальнейшие действия оболочки будут опираться на сохраненный файл App_Em/Service.cs
Создание на клиенте класса-переходника
Для того, чтобы связать удаленную Web-службу с оконным приложением пользователя, нужно создать специальный промежуточный proxy-класс (прокси-класс), который будет служить переходником между Web-службой и оконным приложением и организовывать всю работу по отправке запросов и получению результатов. Этот класс очень сложный для создания вручную, поэтому оболочка создает его с помощью мастера при попытке разработчика добавить к локальному приложению Web-ссылку.
- В панели Solution Explorer выделите узел локального проекта WinApp и через контекстное меню выполните команду Add Web Reference. Появится окно мастера
- Выберите ссылку Web services in this solution и в появишемся окне мастера выберите ссылку Service
- После того, как станет доступной кнопка Add Reference, щелкните на ней
Через некоторое время мастер сгенерирует необходимую инфраструктуру для подключения к Web-службе с помощью созданного прокси-класса, которую разместит в папке Web References/localhost, и мы ее можем увидеть в Проводнике Windows Explorer
Эту инфраструктуру обеспечивают следующие файлы
- Reference.cs - файл, содержащий код созданного мастером прокси-класса WinApp.localhost.Service
- Service.disco (discovery service) - XML -файл обнаружения, дающий клиенту информацию о том, что Web-служба существует)
- Reference.map - карта Web-службы, содержащая справочную информацию о том, что делает эта служба
- Service.wsdl (Web Services Description Language - язык описания Web-служб) - XML -описание Web-службы, необходимое различным инструментам оболочки для автоматического создания классов, интерфейсов и выполнения другой работы
Каталог localhost проекта WinApp в панели Solution Explorer представлен единым значком с одноименным названием
Разработчики Web-служб обычно работают с файлами *.cs, *.asmx, *.disco, Web.config. Возможно, потребуется еще работа с файлом Global.asax, который предназначен для хранения обработчиков событий глобального уровня. Этого файла в нашем решении нет, но его всегда можно добавить, что мы сейчас и сделаем. Нужно помнить, что в отличие от файлов Web.config, которые должны быть уникальны только в отдельном каталоге, файл Global.asax в приложении должен быть единственным и находиться в корневом узле проекта.
- В панели Solution Explorer вызовите контекстное меню для узла WebServiceApp и командой Add New Item добавьте к проекту ASP.NET файл Global.asax
Автоматически созданная заготовка файла Global.asax содержит несколько пустых обработчиков некоторых глобальных событий уровня всего приложения.
Если посмотреть на проект WinApp после создания прокси-класса через панель Class View, то можно увидеть сложную конфигурацию автоматически сгенерированного оболочкой кода
- Откройте файл Form1.cs в режиме View Designer и двойным щелчком на кнопке btnSubmit создайте для нее обработчик, который заполните так
private void btnSubmit_Click(object sender, EventArgs e) { if (textBox1.Text.Length == 0) MessageBox.Show("Заполните текстовое поле"); else { this.Cursor = Cursors.WaitCursor; WinApp.localhost.Service webService = new WinApp.localhost.Service(); string mess = webService.Hello(textBox1.Text) + " !!!"; this.Cursor = Cursors.Default; MessageBox.Show(mess, "Сообщение от Web-службы"); } }Листинг 19.4. Обработчик щелчка кнопки для взаимодействия с Web-службой
- В панели Solution Explorer вызовите контекстное меню для корневого узла проекта WinApp и выполните команду Set as StartUp Project (или просто щелкните курсором мыши по узлу WinApp )
- Запустите решение и испытайте работу Web-службы
Вот один из вариантов полученного результата