Подключение к web-сервису
Web-сервисы представляют собой отдельные компоненты, к которым можно получить доступ через Интернет и задействовать их в своем web-приложении. Их использование напоминает подключение компонент .NET или СOM в Windows-приложениях и зачастую существенно облегчает разработку. Более подробную информацию о web-сервисах вы сможете найти в литературе, посвященной технологии ASP.NET.
Подключение к web-сервисам — это, как правило, длительный процесс, занимающий несколько секунд. Рассмотрим два варианта подключения к сервису: один будет подключаться к web-службе синхронно, другой — асинхронно.
Создадим вначале web-сервис. В Visual Studio .NET создаем новый проект, в окне шаблонов выбираем ASP.NET Web Service и называем его HelloWorldService (рис. 7.6).
Рис. 7.6. Создание web-сервиса
Переключаемся в режим кода и убираем комментарии с существующего метода HelloWorld (рис. 7.7).
увеличить изображение
Рис. 7.7. Режим кода HelloWorldService
Добавляем в тело метода следующий код:
[WebMethod] public string HelloWorld() { // Имитация длительной работы метода System.Threading.Thread.Sleep(2000); return "Hello World"; }
Компилируем проект и закрываем его. Теперь займемся Windows-приложением, которое будет вызывать Web-Service. Создайте новый проект и назовите его WebService. В окне Solution Explorer щелкаем правой кнопкой на папке References и в появившемся меню выбираем пункт Add Web Reference (рис. 7.8).
увеличить изображение
Рис. 7.8. Приложение WebService в режиме дизайна. Добавление ссылки на web-сервис
private void btnSync_Click(object sender, System.EventArgs e) { // Деактивируем кнопку. btnSync.Enabled = false; // Создаем экземпляр Web-службы WebService.Service1 service = new WebService.Service1(); // Запуск метода lblHelloWorld.Text = service.HelloWorld(); // Активируем кнопку. btnSync.Enabled = true;
}
Для асинхронного запуска добавляем обработчик кнопки btnAsync и метод AsyncCallBackMethod:
private void btnAsync_Click(object sender, System.EventArgs e) { // Деактивируем кнопку. btnAsync.Enabled = false; // Создаем экземпляр web-службы WebService.Service1 service = new WebService.Service1(); // Запуск метод асинхронно service.BeginHelloWorld(new AsyncCallback(AsyncCallBackMethod), service);
} private void AsyncCallBackMethod(IAsyncResult ar) { WebService.Service1 service = (WebService.Service1)ar.AsyncState; lblHelloWorld.Text = service.EndHelloWorld(ar); // Активируем кнопку. btnAsync.Enabled = true; }
Запускаем проект и нажимаем на кнопку Sync. Кнопка становится неактивной на время подключения к web-сервису, затем выводится строка Hello World — содержимое метода HelloWorld. В течение подключения приложение зависает; попробуйте перемещать форму по экрану. Нажимаем на кнопку btnAsync — в этом случае форма отвечает на запросы, поскольку основной поток свободен, а выполнение метода web-службы происходит в параллельном потоке.
На диске, прилагаемом к книге, вы найдете приложение WebService (Code\Glava7\ WebService).