Опубликован: 13.07.2010 | Доступ: свободный | Студентов: 891 / 20 | Оценка: 4.40 / 4.20 | Длительность: 77:34:00
Самостоятельная работа 30:

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

Эту инфраструктуру обеспечивают следующие файлы

  1. Reference.cs - файл, содержащий код созданного мастером прокси-класса WinApp.localhost.Service
  2. Service.disco (discovery service) - XML -файл обнаружения, дающий клиенту информацию о том, что Web-служба существует)
  3. Reference.map - карта Web-службы, содержащая справочную информацию о том, что делает эта служба
  4. 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-службы

Вот один из вариантов полученного результата