cbfaf4d4130305f4c10302e686e0d21f.ppt
- Количество слайдов: 76
Програмиране за. NET Framework http: //www. nakov. com/dotnet/ Web услуги с ASP. NET Светлин Наков Национална академия по разработка на софтуер academy. devbg. org
Необходими знания u u u Базови познания за. NET Framework Базови познания за езика C# Базови познания за ASP. NET Начални умения за работа с Visual Studio. NET Познания по XML Атрибути
Съдържание u Инфраструктурата на Web услугите v v v v v Разпределени приложения Нуждата от Web услуги Услуги и Web услуги UDDI директории за Web услуги Откриване на Web услуги (DISCO) WSDL описания на услуги SOAP – формат на заявките Протоколен стек на Web услугите Сценарии за използване на Web услуги. NET Enterprise приложения
Съдържание (2) u Web услугите в ASP. NET v v v v Архитектура Създаване на Web услуги Публикуване на Web услуги Използване на Web услуги. Генериране на прокси клас Web услугите и VS. NET – създаване и консумиране Атрибути за Web услугите – [Web. Service], [Web. Method] Прехвърляне на типове
Съдържание (3) u Web услугите в ASP. NET v v v v v Deployment на Web услуги върху IIS Дебъгване на Web услуги Моделът на изпълнение на Web услугите в ASP. NET Асинхронно извикване Web услуги и работа с данни Поддръжка на сесии Сигурност на Web услугите Сигурност чрез сесии Изключенията в Web услугите
Разпределени приложения u Повечето днешни приложения са разпределени v u Състоят се от няколко раздалечени компонента, които си взаимодействат Модели за разпределени приложения v v Модел "клиент/сървър" Модел "разпределени обекти" v v v DCOM – ползва се в Microsoft Windows CORBA – отворен стандарт, доста сложен Java RMI – базира се на Java технологията. NET Remoting – ползва се в. NET Framework Модел "Web услуги"
Нуждата от Web услуги u Моделът "разпределени обекти не е подходящ за употреба в Интернет v v v v u Силна свързаност между услуга и клиент Трудности при хетерогенна инфраструктура Проблеми с версиите Защитните стени (firewalls) силно затрудняват комуникацията COM/DCOM се поддържа само в Windows CORBA не работи добре през Интернет Java RMI / EJB се поддържат само в Java Решението: Web услуги
Какво е услуга? u В реалния свят услугата е: v v v Единица работа, извършвана от доставчик на услуги Предоставя някакъв желан резултат на клиента (консуматор на услуги) С ясно дефинирани входни параметри и изходни резултати Лесна за използване Винаги достъпна Има характеристики за качество (цена, време за извършване и др. )
Web-услуги u Web-услугите моделират услугите от реалния свят v v Програмни компоненти, достъпни отдалечено през Web Модел за изпълнение “заявка-отговор” v v Клиентът поръчва, услугата изпълнява поръчката и връща резултат Използват отворени стандарти за комуникация – HTTP, XML и SOAP Сами описват интерфейса си за достъп чрез езика WSDL Могат да бъдат търсени чрез UDDI
Web-услуги u Web-услугите моделират услугите от реалния свят v Работят на принципа на обмяна на SOAP съобщения v v Съобщенията съдържат структурирана информация – данни + метаданни (описание на данните) Независими от операционната система, платформата и езика за програмиране Функционално-независими (loosely coupled) Слабо-обвързани с клиента
Инфраструктурата u Инфраструктурата на Web услугите се състои от следните компоненти v Директория (Directory) v v Откриване (Discovery) v v DISCO Описание (Description) v v UDDI WSDL Формат на заявките (Wire Format) v v SOAP XML, XSD, HTTP
Директории за Web услуги u Директориите за Web услуги v v Позволяват търсене на Web услуги Организирани са по категории Може да се търси по различни параметри Използват UDDI стандарта v v UDDI (Universal Description, Discovery and Integration) Отворен стандарт на OASIS Представлява Web услуга, предлагаща регистрация и търсене на други Web услуги Пример за UDDI директория: v http: //uddi. microsoft. com
Директории – пример
Откриване на Web услуги u Откриването на Web услуги v v v Позволява да се извлече описанието на Web услуга от даден сървър Използват се т. нар. "discovery" файлове (*. disco) DISCO (Discovery of Web Services) v v v XML базиран език Описва Web услугата – връзка към WSDL файла, връзка към самата услуга и връзка към документация за услугата Обикновено disco файлът стои в главната директория на услугата v Напр. http: //www. mysite. com/math. disco
WSDL описания на услуги u WSDL (Web Services Description Language) v Описва интерфейса за достъп до дадена Web услуга v v v имената на поддържаните методи входни и изходни параметри използвани типове данни XML базиран отворен стандарт на W 3 C ASP. NET Web услугите връщат своя WSDL при извикване с параметър ? wsdl v http: //localhost/My. Service. asmx? wsdl
SOAP – формат на заявките u SOAP (Simple Object Access Protocol) v v u Едно SOAP съобщение се състои от: v v u Дефинира XML базиран формат за обмяна на съобщения Отворен стандарт на W 3 C SOAP хедър – описва параметри на съобщението (метаданни) SOAP тяло – съдържа самото съобщение (данни – изпратената или върнатата заявка) Обикновено SOAP съобщенията се предават по протокол HTTP v Това позволява да преминават през firewall
Инфраструктурата Източник: MSDN
Протоколен стек на Web услугите SOAP Съобщение WSDL Интерфейс XSD Схема XML Данни HTTP Транспорт
HTTP, XML, XSD u HTTP v v u XML v v u Протокол за обмяна на информация между Web сървър и Web браузър Използва модела "заявка-отговор" Не поддържа стандартно сесия (stateless) Отворен стандарт на W 3 C Прост, текстово-базиран език за структурирано описание на информация Отворен стандарт на W 3 C XSD v v Мощен XML-базиран език за описание структурата (формата) на XML документи Отворен стандарт на W 3 C
Сценарии за използване u Типични сценарии за употреба на Web услуги v Услуги към клиентски приложения v v Интеграция на приложения v v Могат да се консумират директно от клиентите, например от MS Office Взаимодействие между приложения, работещи на различни платформи и ОС Връзка между отделните компоненти при Enterprise приложения Front End (клиент) SOAP пакети Web услуга ADO. NET Back End (база данни)
Enterprise приложения u Какво са "Enterprise приложенията"? v v v u Многослойни разпределени приложения, отговарящи на нуждите на големите корпоративни клиенти Надеждни Скалируеми Лесно разширяеми Устойчиви на сривове "Enterprise" е buzzword – понятие, за което много се говори, много се спекулира с него, но няма точна дефиниция какво означава
. NET Enterprise приложения u Класическата Enterprise архитектура е трислойна:
. NET Enterprise приложения u Слоевете в трислойната архитектура: v Презентационен слой (Front End) v v v Бизнес слой (Business Tier) v v v Управлява взаимодействието с потребителя (потребителски интерфейс) Windows Forms и ASP. NET Web приложения Реализира работните процеси и операциите над данните (бизнес логиката) ASP. NET Web услуги Слой за данните (Back End) v v Управлява данните на системата База от данни (MS SQL Server, Oracle, DB 2)
Web услугите в ASP. NET u u u Реализират се в пространството System. Web. Services Имплементират предаването и приемането на SOAP съобщения Осигуряват преобразуване на типовете от XML в. NET типове и обратното Автоматично генериране на WSDL описания Автоматично генериране на C# прокси класове по WSDL описание
ASP. NET Web услуги – архитектура u u Web услугите се хостват в IIS (Internet Information Server) Изпълняват се от ASP. NET работния процес (aspnet_wp) SOAP заявка Клиентски код SOAP отговор ASP. NET Web услуга [Web. Method] public string Blah() { … } Платформа (. NET / Java / PHP / Perl) ОС ISAPI филтър ASP. NET работен процес IIS Common Language Runtime Операционна система (Win 2000, Win. XP, Win 2003)
Създаване на Web услуги u В. NET Framework за създаване на Web услуга се създава. asmx файл v Задава се специален таг, указващ, че файлът е Web услуга: <%@ Web. Service Language="C#" Class="Some. Service" %> v v Наследява се класът System. Web. Services. Web. Service (не е задължително) Имплементират се 1 или няколко Web метода: [Web. Method] public void Some. Method(…) { … }
" src="https://present5.com/presentation/cbfaf4d4130305f4c10302e686e0d21f/image-32.jpg" alt="Web-услуга – пример Demo-1 -Add. Service. asmx <%@ Web. Service Language="C#" Class="Add. Service" %>" /> Web-услуга – пример Demo-1 -Add. Service. asmx <%@ Web. Service Language="C#" Class="Add. Service" %> using System; using System. Web. Services; public class Add. Service : Web. Service { [Web. Method] public int Add(int a, int b) { return a + b; } }
Публикуване на Web услуги u u Web услугите се изпълняват от ASP. NET като Web-приложения Могат да се настройват както Webприложенията с файловете v u u Web. config и Global. asax Обикновено се хостват от IIS (Internet Information Server) Публикуване на Web услуга v v v Копира се директорията на услугата в C: Inetpubwwwroot Създава се Web Application в IIS Компилира се услугата (ако е необходимо)
Демонстрация #1 u Нашата първа Web услуга – публикуване и тестване
Използване на Web услуги u u В. NET Framework за консумиране на Web услуги се генерират т. нар. прокси класове Прокси класовете v v Генерират се по WSDL дефиницията на Web услугата (http: //…/service? wsdl) Представляват сорс код на C# (VB. NET, …) Преобразуват заявките от. NET към SOAP заявки и SOAP отговорите към. NET Преобразуват. NET типовете в XML и обратното (marshalling) клиент . NET типове прокси SOAP пакети Web услуга
Генериране на прокси клас u Прокси класовете могат да се генерират с инструмента wsdl v Пример: wsdl http: //localhost/Demo-1 -Add. Service/Demo-1 Add. Service. asmx? wsdl v u Резултатът е прокси класът Add. Service. cs За всеки метод XXX се генерират 3 метода с подходящите параметри: v v XXX(…) – за синхронно извикване Begin. XXX(…) и End. XXX(…) – за асинхронно извикване
Използване на прокси клас u Използването на прокси класовете е като обикновените класове v v Инстанцира се прокси класът Извикват му се методите Add. Service add. Sevice = new Add. Service(); int sum = add. Service. Add(5, 6); v u Методите могат да предизвикат Soap. Exception или Web. Exception При промяна на интерфейса на Web услугата трябва да се генерира отново прокси класът
Демонстрация #2 u Използване на Web услуга
Web услугите и VS. NET u Visual Studio. NET има силна поддръжка за Web услуги v Създаване на Web услуги v Консумиране на Web услуги v Автоматично генериране на прокси клас по WSDL описанието
Създаване на услуга с VS. NET u При създаване на нова Web-услуга VS. NET 2003 прави следното: 1. Създава. sln файл: C: Documents and Settings
Демонстрация #3 u Създаване на Web услуга с VS. NET
Демонстрация #4 u Консумиране на Web услуга с VS. NET
Атрибути за Web услугите u Атрибутът [Web. Service] v v u Задава описание на Web услугата Namespace – задава XML пространство, което идентифицира уникално услугата Name – име на услугата Description – текстово описание на услугата Атрибутът [Web. Method] v v v Указва, че даден метод е достъпен за клиентите на Web услугата Enable. Session=true – позволява използване на сесия (Session обекта в ASP. NET) Description – текстово описание на метода
Атрибути на услугите – пример [Web. Service( Description="Demo Web service – " + " demonstrates complex type marshalling. ", Namespace="http: //www. devbg. org/services/" + "Demo_5_Service_Types/2004/12/17", Name="Demo 5 - Service Types")] public class Types. Service : System. Web. Services. Web. Service {. . . [Web. Method( Description="Returns the list of " + "currently active issues. ", Enable. Session=true)] public Issue[] Get. Issues() { … }. . . }
Прехвърляне на типове u Прехвърлянето на типовете (type marshalling) в. NET Framework се извършва автоматично v u Използва се вградената XML сериализация Като параметри и връщана стойност на методите могат да бъдат използвани: Тип Примитивни типове Изброени типове Описание Например: string, char, byte, bool, sbyte, int, uint, long, ulong, short, ushort, float, double, decimal, … Например: enum Color {Red, Blue} Предават се като низове. Ползват се имената на изброените стойности.
Прехвърляне на типове u Като параметри и връщана стойност на методите могат да бъдат използвани: Тип Описание Класове и структури Предават се само публичните полета и свойства на класовете и структурите. Поддържат се вложени типове и дървовидни структури, но не и цикли. Трябва да е дефиниран конструктор без параметри! Ползва се XML сериализация. Примери: public struct Point { public int x, y; } public class Student { public int Age { get {…} set {…} }
Прехвърляне на типове u Като параметри и връщана стойност на методите могат да бъдат използвани: Тип Масиви Колекции Data. Set обекти Xml. Node Описание Масиви от примитивни типове, изброени типове, класове или структури Например: string[], Color[], Point[] Колекции от примитивни типове, изброени типове, класове или структури. Пример: ICollection, Array. List, … Предават се като масиви. ADO. NET Data. Set обекти. Предават се заедно с XSD схемата, която описва структурата им. XML фрагменти. Предават се в чист вид.
Deployment на Web услуга u Искаме да публикуваме Web-услуга Мy. Service, която имаме на сорс-код 1. 2. 3. u Копираме всички файлове на услугата в C: InetpubwwwrootMy. Service От IIS административната конзола създаваме Web приложение за виртуалната директория My. Service Компилираме услугата с VS. NET Ако няма да дебъгваме (например при Release), изтриваме сорс-кода: del *. csproj *. resx *. webinfo …
Демонстрация #5 u Прехвърляне на сложни типове – Web услугата
Демонстрация #6 u Прехвърляне на сложни типове – клиент за Web услугата
Демонстрация #7 u Дебъгване на Web услуги
Моделът на изпълнение u За всяка заявка към Web услуга ASP. NET прави следното: 1. 2. 3. 4. 5. 6. u Инстанцира класа на Web-услугата Заделя отделна нишка от пула Изпълнява заявката в тази нишка Връща резултата към клиента Връща нишката в обратно пула Оставя инстанцията на класа на услугата да бъде унищожена от GC Заявките се подреждат в опашка и се изпълняват по няколко едновременно
Асинхронно извикване u u u Асинхронното извикване се използва при времеотнемащи операции с Web услуги За асинхронни извиквания в прокси класа има методи Begin. XXX(…) и End. XXX(…) При завършване услугата извиква зададен метод за обратно извикване (callback) public void static Main() { Async. Callback cb = new Async. Callback(Call. Finished); service. Begin. Long. Process(params, cb, service); } private void Call. Finished(IAsync. Result async. Result) { Console. Write. Line("Async call completed. "); }
Демонстрация #8 u Асинхронно извикване на Web услуга
Web услуги и работа с данни u Web услугите често се използват за достъп до данни v v Обикновено се прехвърлят Data. Set обекти или масиви с данни Web услугата реализира: v v Извличането на данни Промяната на данни Изпълнение нa SQL заявка Извикване на Web услуга XML Data. Set Клиент Промяна на данни през XML Data. Set Web услуга Резултат от SQL заявка DB Заявки за нанасяне на промените База от данни
Демонстрация #9 u Достъп до данни през Web услуга – услугата
Демонстрация #10 u Достъп до данни през Web услуга – клиентското приложение
Поддръжка на сесии u ASP. NET Web услугите поддържат сесии, както всички Web приложения v v u Session – съдържа текущата сесия Application – съдържа контекста на Web приложението Разрешаване на сесията при услугата: [Web. Method(Enable. Session=true)] u Разрешаване на сесията при клиента: My. Service my. Service = new My. Service(); my. Service. Cookie. Container = new System. Net. Cookie. Container();
Демонстрация #11 u Използване на сесии – Web услуга
Демонстрация #12 u Използване на сесии – клиент за Web услугата
Сигурност на Web услугите u u Често пъти се изисква някои методи да не могат да се викат без автентикация Защитата от неоторизиран достъп може да се направи по няколко начина: v v v Всеки метод да има допълнителни параметри (потребител, парола и др. ) Чрез използване на сесия Чрез средствата на Web Services Enhancements (WSE). WSE поддържат: v v v Криптиране на трафика Цифрово подписване Автентикация чрез цифрови сертификати
Сигурност чрез сесии 1. Добавяме метод за автентикация на потребител: [Web. Method(Enable. Session = true, Description = "Checks given login and creates a session. ")] public void Login(string a. User, string a. Password) { if ( user/pass is valid ) { Session["user"] = a. User; } else { throw new Exception("Ivalid login!"); } }
Сигурност чрез сесии 2. Във всеки защитен метод проверяваме дали има автентикиран потребител: [Web. Method(Enable. Session = true, Description = "This method requires active session. ")] public string Get. Protected. Data() { string user = (string) Session["user"]; if (user != null) { return "This is protected data!"; } else { throw new Exception("Access denied!"); } }
Демонстрация #13 u Защита на достъпа до Web услуга чрез сесия – Web услугата
Демонстрация #14 u Защита на достъпа до Web услуга чрез сесия – клиент за Web услугата
Изключенията в Web услугите u Когато Web услуга хвърли изключение, клиентът получава Soap. Exception v v v u За да връщаме информация за проблем, възникнал в Web метод: v v u Оригиналният тип на изключението се губи Губят се вложените (inner) изключения Запазва се текстът (свойството Message) Дефинираме изброен тип (enum), съдържащ възможните грешки Връщаме от Web метода код на грешка – инстанция на изброения тип Клиентът проверява кода за грешка
Изключенията в Web услугите [Web. Method] public User. Error Add. User(string a. User, string a. Pass) { if ( a. User is invalid ) return User. Error. Invalid. User; if ( a. Pass is invalid ) return User. Error. Invalid. Password; . . . return User. Error. Success; } public enum User. Error { Success, User. Already. Exists, Invalid. User, Invalid. Password, Database. Error }
Web услуги с ASP. NET Въпроси?
Упражнения 1. 2. 3. 4. 5. 6. 7. 8. Какви модели за разпределени приложения познавате? Каква е разликата между тях? Какво представляват Web услугите? Какъв проблем решава тази технология? Какво представлява инфраструктурата на Web услугите? От какво се състои? Какво представляват UDDI директориите и за какво служат? Какво е DISCO и за какво служи? Какво е WSDL и за какво се използва? Какво е SOAP? От какво се състои? За какво се използва? Опишете типични сценарии за използване на Web услуги при. NET базирани приложения.
Упражнения 9. 10. 11. 12. Без да използвате VS. NET създайте проста Web услуга (asmx файл), която по зададена дата връща деня от седмицата (на български език). Инсталирайте Web услугата на IIS. Тествайте с Internet Explorer. Разгледайте WSDL описанието. Без да използвате VS. NET създайте клиент (конзолно приложение) за Web услугата от предходната задача. С помощта на VS. NET създайте Web услуга, която приема 2 символни низа и връща колко пъти първият се среща във втория. Дефинирайте уникален namespace за Web услугата. Задайте подходящо описание на Web метода й. С помощта на VS. NET създайте клиент за Webуслугата от предходната задача.
Упражнения 13. В едно училище учат ученици, разпределени в различни класове. Всички ученици от даден клас изучават някаква съвкупност от учебни предмети и имат по няколко оценки от изпитванията по всеки предмет. Проектирайте релационна схема, която да съхранява информация за учениците, класовете, учебните предмети и оценките. Реализирайте Web-услуга, която изпълнява следните операции (чрез SQL команди към БД): • добавяне/изтриване на клас • добавяне/изтриване/промяна на ученик, извличане на учениците (от даден клас) • добавяне/изтриване на учебен предмет, извличане на уч. предмети (за даден клас) • добавяне/изтриване/извличане на оценки (на даден ученик по даден предмет) Използвайте свързания модел от ADO. NET.
Упражнения 14. Създайте Windows Forms клиент за Web услугата от предходната задача. Приложението трябва да визуализира класовете и да позволява навигация сред тях. При избор на даден клас трябва да се показват учениците, които го съставят и учебните предмети, които тези ученици изучават. Трябва да се позволява редактиране на учениците и учебните предмети за текущия избран клас. При избор на ученик трябва да се позволява редактиране на оценките му по всеки от учебните предметите. При всяка редакция трябва да се извиква Web метод от услугата чрез който измененията да се нанасят в базата данни. При промяна на текущия избран клас, трябва да се извличат наново учениците и предметите. При промяна на избрания ученик трябва оценките му да се зареждат наново от Web услугата.
Упражнения 15. Създайте Web услуга, която по зададено цяло число p (p e UInt 32) намира и връща броя прости числа в интервала [1…p]. Услугата би трябвало да работи бавно при големи стойности на p. Създайте Windows Forms приложение, което съдържа текстово поле, бутон и списък. При въвеждане на число в текстовото поле и натискане на бутона трябва да се извиква асинхронно Web услугата за пресмятане на простите числа между 1 и p. При завършване на асинхронно извикване резултатът трябва да се добавя в списъка във формат "Primes in range [1…p] are XXX". Не забравяйте, че асинхронните извиквания използват нишки от Thread Pool-а на. NET Framework, които не трябва да достъпват директно потребителския интерфейс.
Упражнения 16. Проектирайте релационна схема от таблици в MS SQL сървър, която описва потребители и правата им за достъп в дадена система. Всеки потребител се характеризира с име, login и парола и може да има достъп до подмножество от функциите на системата. Всяка функция в системата си има име и може да е достъпна от подмножество на потребителите. Създайте Web услуга, която чрез използване на несвързания модел на достъп до данни в ADO. NET реализира Web методи за извличане на данните (във вид на Data. Set) и за обновяване на променени данни (съдържащи се в Data. Set). Реализирайте Windows Forms приложение, което позволява редактиране на потребителите и техните права използвайки Web услугата.
Упражнения 17. Реализирайте системата за управление на потребители и техните права от предходната задача като добавите автентикация в Web услугата и защитите методите за достъп до данните чрез ASP. NET сесията. Web услугата трябва да позволява достъп до защитените методи само на потребителя с име "admin". Първоначално създайте този потребител директно в базата данни на ръка.
Използвана литература u u u MSDN Library – http: //msdn. microsoft. com Стоян Йорданов, Web услуги – http: //www. nakov. com/dotnet/2003/lectures/Web. Services. doc MSDN Training, Developing XML Web Services Using Microsoft® ASP. NET (MOC 2524 B) Enterprise Application – http: //c 2. com/cgi/wiki? Enterprise. Application Consuming a Data. Set from an XML Web Service, MSDN Library – http: //msdn. microsoft. com