Из цикла лекций «Internet-технологии разработки приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета Пример Web-службы Калькулятор с валидацией Показать работу приложения GetWebServiceCalculate проф. В.К.Толстых, www.tolstykh.com Web-служба «Калькулятор» Атрибуты службы Имя службы Поддержка сервиса для ранних версий 1.1 Атрибуты метода Параметры метода Имя метода Содержание файла – одна строка Реализация метода: Атрибуты CacheDuration – определяет промежуток времени в секундах на который кэшируется Web-служба. По умолчанию он равен 0, т.е. кэширование отключено. Description – описание метода, которое выводится на страницу службы под ссылкой на страницу метода. EnableSession – включает поддержку сеансов: [WebMethod(EnableSession=true)]. По умолчанию поддержка сеансов в Web-службах отключена, т.е. после выполнения каждого метода связь со службой разрывается. TransactionOption – управляет поддержкой транзакций MessageName – альтернативное (уникальное) имя метода, если их несколько с одним именем, т.е. – перегружаемые. BufferResponse – по умолчанию true, т.е. – ответ Web-службы перед отправкой на запрос клиента полностью формируется в буфере. Тестирование Web-службы «Калькулятор» Ответ – результат тестирования Показать тестирование метода Calculate Полное тестирование (в указанном виде) доступно только с локального сервера Показать WSDL Описание службы Вызов Web-службы «Калькулятор» в ASP.NET-приложении GetWebServiceCalculate Готовим ASP.NET проект для отправки исходных данных в Web-службу Валидатор CustomValidadtor далее Подключение ссылки в VS 2012 на Web-службу «Калькулятор» Calculate.asmx Если Web-служба когда-либо будет модернизирована, то необходимо ссылку обновить через локальное меню папки App_WebReferences Операции (методы) службы Пространство имён, где будет находится прокси-класс для службы Проверьте атрибут асинхронного вызова страницы Вызов Web-служб реализуется с асинхронных .aspxстраниц, т .е. в директиве Page файла .aspx должно быть Async="true". Если вы делаете операцию асинхронно, то это означает, что вы запускаете операцию и продолжаете что-то делать, возвращаясь к результатам вашей операции только тогда, когда она уже завершится. Асинхронный вызов актуален если таких вызовов несколько и они связаны между собой. При этом код прокси-класса (для взаимодействия с web-службой) автоматически синхронизирует все поставленные в очередь вызовы и блокирует рендеринг страницы до тех пор пока все они не будут выполнены. Приложения, требующие длительного времени обработки (Web-службы, БД), должны организовываться в виде асинхронных страниц. В момент ожидания ответа от других серверов они не занимают пул приложений и не прерывают связь с клиентом из-за ограниченности времени. Синхронные страницы могут «забить» пул ожиданием ответов от внешних задач => новые запросы не обрабатываются (503 «Server too busy»), процессор приложения почти бездействует, а задачи в пуле снимаются с указанным сообщением. Код асинхронной страницы вызова операции Web-службы в.NET 4.5 Входные переменные для Web-службы Вызов метода валидации текущей страницы далее Идентификатор прокси-класса Web-службы Валидаторы проекта Проект может быть дополнен серверной и клиентской реализацией валидатора CustomValidator. Контроль данных целесообразно проводить до вызова удалённых служб. Серверная часть валидатора: Клиентская часть валидатора: Клиентский скрипт программируется вручную. Параметры функции – стандартные идентификаторы. Если преобразование к вещественному числу не дало результат NaN для обеих текст-боксов, то валидация на клиентской машине – успешная.