powerpoint презентация (1,21 mb)
TRANSCRIPT
Web услугиWeb услугис ASP.NETс ASP.NET
Програмиране за .NET FrameworkПрограмиране за .NET Frameworkhttp://www.nakov.com/dotnet/http://www.nakov.com/dotnet/
Светлин НаковСветлин НаковНационална академия по Национална академия по разработка на софтуерразработка на софтуерacademy.devbg.orgacademy.devbg.org
Необходими знанияНеобходими знания Базови познания за .NET FrameworkБазови познания за .NET Framework Базови познания за езика C#Базови познания за езика C# Базови познания за Базови познания за ASP.NETASP.NET Начални умения за работа с Начални умения за работа с Visual Visual
Studio .NETStudio .NET Познания по XMLПознания по XML АтрибутиАтрибути
СъдържаниеСъдържание Инфраструктурата на Web услугитеИнфраструктурата на Web услугите
Разпределени приложенияРазпределени приложения Нуждата от Web услугиНуждата от Web услуги Услуги и Web услугиУслуги и Web услуги UDDI директории за Web услугиUDDI директории за Web услуги Откриване на Web услуги (DISCO)Откриване на Web услуги (DISCO) WSDL описания на услугиWSDL описания на услуги SOAP – формат на заявкитеSOAP – формат на заявките Протоколен стек на Web услугитеПротоколен стек на Web услугите Сценарии за използване на Web услугиСценарии за използване на Web услуги .NET Enterprise приложения.NET Enterprise приложения
Съдържание (2)Съдържание (2) Web услугите в ASP.NETWeb услугите в ASP.NET
АрхитектураАрхитектура Създаване на Web услугиСъздаване на Web услуги Публикуване на Web услугиПубликуване на Web услуги Използване на Web услуги. Генериране Използване на Web услуги. Генериране
на прокси класна прокси клас Web услугите и VS.NET – създаване и Web услугите и VS.NET – създаване и
консумиранеконсумиране Атрибути за Web услугите – Атрибути за Web услугите –
[WebService][WebService], , [WebMethod][WebMethod] Прехвърляне на типовеПрехвърляне на типове
Съдържание (3)Съдържание (3) Web услугите в ASP.NETWeb услугите в ASP.NET
Deployment Deployment на на Web Web услуги върху услуги върху IISIIS Дебъгване на Web услугиДебъгване на Web услуги Моделът на изпълнение на Моделът на изпълнение на WebWeb
услугитеуслугите в в ASP.NETASP.NET Асинхронно извикванеАсинхронно извикване Web услуги и работа с данниWeb услуги и работа с данни Поддръжка на сесииПоддръжка на сесии Сигурност на Сигурност на Web Web услугитеуслугите Сигурност чрез сесииСигурност чрез сесии Изключенията в Изключенията в Web Web услугитеуслугите
Разпределени приложенияРазпределени приложения Повечето днешни приложения са Повечето днешни приложения са
разпределениразпределени Състоят се от няколко раздалечени Състоят се от няколко раздалечени
компонента, които си взаимодействаткомпонента, които си взаимодействат Модели за разпределени приложенияМодели за разпределени приложения
Модел "клиент/сървър"Модел "клиент/сървър" Модел "разпределени обекти"Модел "разпределени обекти"
DCOM – DCOM – ползва се в ползва се в Microsoft WindowsMicrosoft Windows CORBA – CORBA – отворен стандарт, доста сложенотворен стандарт, доста сложен Java RMIJava RMI – базира се на – базира се на JavaJava технологията технологията .NET Remoting – .NET Remoting – ползва се в ползва се в .NET Framework.NET Framework
Модел "Модел "Web Web услуги"услуги"
Нуждата от Нуждата от Web Web услугиуслуги Моделът "разпределени обекти не е Моделът "разпределени обекти не е
подходящ за употреба в Интернетподходящ за употреба в Интернет Силна свързаност между услуга и клиентСилна свързаност между услуга и клиент Трудности при хетерогенна Трудности при хетерогенна
инфраструктураинфраструктура Проблеми с версиитеПроблеми с версиите Защитните стени Защитните стени (firewalls)(firewalls) силно силно
затрудняват комуникациятазатрудняват комуникацията COM/DCOM COM/DCOM се поддържа само в се поддържа само в WindowsWindows CORBA CORBA не работи добре през Интернетне работи добре през Интернет Java RMI / EJB Java RMI / EJB сесе поддържат само в поддържат само в JavaJava
Решението: Решението: WebWeb услуги услуги
Какво е услуга?Какво е услуга? В реалния свят услугата е:В реалния свят услугата е:
Единица работа, извършвана от Единица работа, извършвана от доставчик на услугидоставчик на услуги
Предоставя някакъв желан резултат на Предоставя някакъв желан резултат на клиента (консуматор на услуги)клиента (консуматор на услуги)
С ясно дефинирани входни параметри и С ясно дефинирани входни параметри и изходни резултатиизходни резултати
Лесна за използванеЛесна за използване Винаги достъпнаВинаги достъпна Има характеристики за качество (цена, Има характеристики за качество (цена,
време за извършваневреме за извършване и др.)и др.)
Web-Web-услугиуслуги Web-Web-услугите моделират услугите от услугите моделират услугите от
реалния святреалния свят Програмни компоненти, достъпни Програмни компоненти, достъпни
отдалечено през отдалечено през WebWeb Модел за изпълнение “заявка-отговор”Модел за изпълнение “заявка-отговор”
Клиентът поръчва, услугата изпълнява Клиентът поръчва, услугата изпълнява поръчката и връща резултатпоръчката и връща резултат
Използват отворени стандарти за Използват отворени стандарти за комуникация – комуникация – HTTP, XML HTTP, XML ии SOAP SOAP
Сами описват интерфейса си за достъп Сами описват интерфейса си за достъп чрез езика чрез езика WSDLWSDL
Могат да бъдат търсени чрез Могат да бъдат търсени чрез UDDIUDDI
Web-Web-услугиуслуги Web-Web-услугите моделират услугите от услугите моделират услугите от
реалния святреалния свят Работят на принципа на обмяна на Работят на принципа на обмяна на
SOAP SOAP съобщениясъобщения Съобщенията съдържат структурирана Съобщенията съдържат структурирана
информация – данни + метаданни информация – данни + метаданни (описание на данните)(описание на данните)
Независими от операционната система, Независими от операционната система, платформата и езика за програмиранеплатформата и езика за програмиране
Функционално-независими (Функционално-независими (loosely loosely coupled)coupled)
Слабо-обвързани с клиентаСлабо-обвързани с клиента
ИнфраструктуратаИнфраструктурата Инфраструктурата на Инфраструктурата на Web Web услугите услугите
се състои от следните компонентисе състои от следните компоненти ДиректорияДиректория (Directory) (Directory)
UDDIUDDI Откриване (Откриване (DiscoveryDiscovery))
DISCODISCO Описание (Описание (DescriptionDescription))
WSDLWSDL Формат на заявките Формат на заявките (Wire Format)(Wire Format)
SOAPSOAP XML, XSD, HTTPXML, XSD, HTTP
Директории за Директории за Web Web услугиуслуги Директориите за Web услугиДиректориите за Web услуги
Позволяват търсене на Web услугиПозволяват търсене на Web услуги Организирани са по категорииОрганизирани са по категории Може да се търси по различни Може да се търси по различни
параметрипараметри Използват UDDI стандартаИзползват UDDI стандарта
UDDI (Universal Description, Discovery and UDDI (Universal Description, Discovery and Integration)Integration)
Отворен стандарт на OASISОтворен стандарт на OASIS Представлява Представлява WebWeb услуга, предлагаща услуга, предлагаща
регистрация и търсене на други регистрация и търсене на други WebWeb услуги услуги Пример за UDDI директория:Пример за UDDI директория:
http://uddi.microsoft.comhttp://uddi.microsoft.com
Директории Директории – – примерпример
Откриване на Откриване на Web Web услугиуслуги Откриването на Web услугиОткриването на Web услуги
Позволява да се извлече описанието на Позволява да се извлече описанието на Web услуга от даден сървърWeb услуга от даден сървър
Използват се т. нар. "discovery" Използват се т. нар. "discovery" файлове (файлове (*.disco*.disco))
DISCO (Discovery of Web Services)DISCO (Discovery of Web Services) XML XML базиран езикбазиран език Описва Web услугата – връзка към WSDL Описва Web услугата – връзка към WSDL
файла, връзка към самата услуга и връзка файла, връзка към самата услуга и връзка към документация за услугатакъм документация за услугата
Обикновено Обикновено discodisco файлът стои в файлът стои в главната директория на услугатаглавната директория на услугата Напр. Напр. http://www.mysite.com/math/math.discohttp://www.mysite.com/math/math.disco
DISCO DISCO файлове – примерфайлове – пример<?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="utf-8"?><discovery<discovery xmlns="http://schemas.xmlsoap.org/disco/">xmlns="http://schemas.xmlsoap.org/disco/">
<contractRef<contractRef ref="http://www.myserver.com/Demo-5-Service-ref="http://www.myserver.com/Demo-5-Service-Types/TypesService.asmx?wsdl"Types/TypesService.asmx?wsdl" docRef="http://www.myserver.com/Demo-5-Service-docRef="http://www.myserver.com/Demo-5-Service-Types/TypesService.asmx"Types/TypesService.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" />xmlns="http://schemas.xmlsoap.org/disco/scl/" />
<soap <soap address="http://www.myserver.com/Demo-5-Service-address="http://www.myserver.com/Demo-5-Service-Types/TypesService.asmx"Types/TypesService.asmx" xmlns:q1="http://www.myserver.com/schemas/ xmlns:q1="http://www.myserver.com/schemas/ Demo_5_Service_Types/"Demo_5_Service_Types/" binding="q1:TypesServiceSoap"binding="q1:TypesServiceSoap" xmlns="http://schemas.xmlsoap.org/disco/soap/" />xmlns="http://schemas.xmlsoap.org/disco/soap/" />
</discovery></discovery>
WSDL WSDL описания на услугиописания на услуги WSDL (Web Services Description WSDL (Web Services Description
Language)Language) Описва интерфейса за достъп до Описва интерфейса за достъп до
дадена Web услугададена Web услуга имената на поддържаните методиимената на поддържаните методи входни и изходни параметривходни и изходни параметри използвани типове данниизползвани типове данни
XML базиран отворен стандарт на W3CXML базиран отворен стандарт на W3C ASP.NET Web услугите връщат своя ASP.NET Web услугите връщат своя
WSDL при извикване с параметър WSDL при извикване с параметър ?wsdl?wsdl http://localhost/MyService.asmx?wsdlhttp://localhost/MyService.asmx?wsdl
WSDL WSDL описание – примерописание – пример<?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="utf-8"?><definitions<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema"xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:s0="http://www.devbg.org/ws/MathService"xmlns:s0="http://www.devbg.org/ws/MathService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://www.devbg.org/ws/MathService"targetNamespace="http://www.devbg.org/ws/MathService" xmlns="http://schemas.xmlsoap.org/wsdl/">xmlns="http://schemas.xmlsoap.org/wsdl/">
<types> … </types><types> … </types>
<message name="AddSoapIn"> … </message><message name="AddSoapIn"> … </message> <portType name="MathServiceSoap"> … </portType><portType name="MathServiceSoap"> … </portType> <binding name="MathServiceSoap" … > … </binding><binding name="MathServiceSoap" … > … </binding> <service name="MathService"> … </service><service name="MathService"> … </service>
</definitions></definitions>
SOAP – SOAP – формат на заявкитеформат на заявките SOAP (Simple Object Access Protocol)SOAP (Simple Object Access Protocol)
Дефинира Дефинира XMLXML базиран формат за обмяна на базиран формат за обмяна на съобщениясъобщения
Отворен стандарт на Отворен стандарт на W3CW3C Едно Едно SOAP SOAP съобщение се състои отсъобщение се състои от::
SOAP SOAP хедър – описва параметри на хедър – описва параметри на съобщениетосъобщението ( (метаданниметаданни))
SOAPSOAP тяло – съдържа самото съобщение тяло – съдържа самото съобщение (данни – изпратената или върнатата заявка)(данни – изпратената или върнатата заявка)
Обикновено Обикновено SOAP SOAP съобщенията се съобщенията се предават по протокол предават по протокол HTTPHTTP Това позволява да преминават през Това позволява да преминават през firewallfirewall
SOAP SOAP заявка – примерзаявка – пример<?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="utf-8"?>
<soap:Envelope<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body><soap:Body> <CalcDistance xmlns="http://www.devbg.org/<CalcDistance xmlns="http://www.devbg.org/CalcCalc">"> <p1><p1> <x><x>44</x></x> <y>5</y><y>5</y> </p1></p1> <p2><p2> <x><x>77</x></x> <y><y>-3-3</y></y> </p2></p2> </CalcDistance></CalcDistance> </soap:Body></soap:Body>
</soap:Envelope></soap:Envelope>
SOAP SOAP отговор – примеротговор – пример<?xml version="1.0" encoding="utf-8"?><?xml version="1.0" encoding="utf-8"?>
<soap:Envelope<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body><soap:Body> <CalcDistanceResponse<CalcDistanceResponse xmlns="http://www.devbg.org/Calc/">xmlns="http://www.devbg.org/Calc/"> <CalcDistanceResult><CalcDistanceResult> 8,544003745317538,54400374531753 </CalcDistanceResult></CalcDistanceResult> </CalcDistanceResponse></CalcDistanceResponse> </soap:Body></soap:Body>
</soap:Envelope></soap:Envelope>
ИнфраструктуратаИнфраструктурата
Източник: MSDN
Протоколен стек на Протоколен стек на WebWeb услугите услугите
SOAPSOAP СъобщениеСъобщение
WSDLWSDL ИнтерфейсИнтерфейс
XSDXSD СхемаСхема
XMLXML
HTTPHTTP
ДанниДанни
ТранспортТранспорт
HTTPHTTP, , XML, XSDXML, XSD HTTPHTTP
Протокол за обмяна на информация между Протокол за обмяна на информация между Web Web сървър и сървър и WebWeb браузър браузър
Използва модела "заявка-отговор"Използва модела "заявка-отговор" Не поддържа стандартно сесия (Не поддържа стандартно сесия (stateless)stateless) Отворен стандарт на Отворен стандарт на W3CW3C
XMLXML Прост, текстово-базиран език за структурирано Прост, текстово-базиран език за структурирано
описание на информацияописание на информация Отворен стандарт на Отворен стандарт на W3CW3C
XSDXSD Мощен Мощен XML-XML-базиран език за описание базиран език за описание
структурата (формата) на структурата (формата) на XML XML документидокументи Отворен стандарт на Отворен стандарт на W3CW3C
Сценарии за използванеСценарии за използване Типични сценарии за употреба на Типични сценарии за употреба на
Web Web услугиуслуги Услуги към клиентски приложенияУслуги към клиентски приложения
Могат да се консумират директно от Могат да се консумират директно от клиентите, например от клиентите, например от MS OfficeMS Office
Интеграция на приложенияИнтеграция на приложения Взаимодействие между приложения, Взаимодействие между приложения,
работещи на различни платформи и ОСработещи на различни платформи и ОС Връзка между отделните компоненти Връзка между отделните компоненти
при при Enterprise Enterprise приложенияприложения
Front EndFront End(клиент)(клиент) Web Web услугауслуга Back EndBack End
((база данни)база данни)SOAPSOAPпакетипакети
ADOADO.NET.NET
Enterprise Enterprise приложенияприложения Какво са "Какво са "Enterprise Enterprise приложенията"?приложенията"?
Многослойни разпределени Многослойни разпределени приложения, отговарящи на нуждите на приложения, отговарящи на нуждите на големите корпоративни клиентиголемите корпоративни клиенти
НадеждниНадеждни СкалируемиСкалируеми Лесно разширяемиЛесно разширяеми Устойчиви на сривовеУстойчиви на сривове
""EnterpriseEnterprise"" е е buzzword buzzword –– понятие, за понятие, за което много се говори, много се което много се говори, много се спекулира с него, но няма точна спекулира с него, но няма точна дефиниция какво означавадефиниция какво означава
.NET Enterprise .NET Enterprise приложенияприложения Класическата Класическата Enterprise Enterprise архитектура архитектура
е трислойна:е трислойна:
Web КлиентПрезентационен слой (Presentation Tier)
ASP.NET Webприложение
Бизнес слой(Business Tier)
ASP.NETWeb услуга
Windows Formsприложение(Rich client)
SOAP
SOAP
Web браузър
HTTPСлой за данни(Back End)
База от данни
ADO.NET
.NET Enterprise .NET Enterprise приложенияприложения Слоевете в трислойнатаСлоевете в трислойната архитектура:архитектура:
Презентационен слой (Front End)Презентационен слой (Front End) Управлява взаимодействието с Управлява взаимодействието с
потребителя (потребителски интерфейс)потребителя (потребителски интерфейс) Windows Forms и ASP.NET Web приложенияWindows Forms и ASP.NET Web приложения
Бизнес слой (Business Tier)Бизнес слой (Business Tier) Реализира работните процеси и операциите Реализира работните процеси и операциите
над данните (бизнес логиката)над данните (бизнес логиката) ASP.NET Web услугиASP.NET Web услуги
Слой за данните (Back End)Слой за данните (Back End) Управлява данните на систематаУправлява данните на системата База от данни (База от данни (MS MS SQL ServerSQL Server, Oracle, DB2, Oracle, DB2))
Web Web услугите в услугите в ASP.NETASP.NET Реализират се в пространството Реализират се в пространството
System.Web.ServicesSystem.Web.Services Имплементират предаването и Имплементират предаването и
приемането на SOAP съобщенияприемането на SOAP съобщения Осигуряват преобразуване на Осигуряват преобразуване на
типовете от XML в .NET типове и типовете от XML в .NET типове и обратнотообратното
Автоматично генериране на Автоматично генериране на WSDLWSDL описанияописания
Автоматично генериране на Автоматично генериране на C# C# прокси класове по прокси класове по WSDLWSDL описание описание
ASP.NET Web ASP.NET Web услуги – архитектурауслуги – архитектура
IISIISОперационна система (Win2000, WinXP, Win2003)Операционна система (Win2000, WinXP, Win2003)
ISAPI ISAPI филтърфилтърCommon Language RuntimeCommon Language Runtime
ASP.NET Web услугаASP.NET Web услуга
[WebMethod][WebMethod]public string public string BBlah()lah(){{ …… }}
КлиентскиКлиентски кодкод
ОСОС
Платформа Платформа ((.NET.NET / /
JavaJava // PHP / PHP / Perl)Perl)
SOAP SOAP заявказаявка
SOAP SOAP отговоротговор
ASP.NET ASP.NET работен процесработен процес
Web услугите се хостват в IIS (Internet Web услугите се хостват в IIS (Internet Information Server)Information Server)
Изпълняват се от ASP.NET работния Изпълняват се от ASP.NET работния процес (aspnet_wp)процес (aspnet_wp)
Създаване на Създаване на Web Web услугиуслуги В .NET Framework за създаване на В .NET Framework за създаване на
Web услуга се създава Web услуга се създава .asmx.asmx файл файл Задава се специален таг, указващ, че Задава се специален таг, указващ, че
файлът е Web услуга:файлът е Web услуга:
Наследява се класът Наследява се класът System.Web. System.Web. Services.WebServiceServices.WebService (не е (не е задължително)задължително)
Имплементират се 1 или няколко Имплементират се 1 или няколко WebWeb метода:метода:
<%@ WebService Language="C#" Class="<%@ WebService Language="C#" Class="SomeSomeService" %>Service" %>
[WebMethod] public void SomeMethod(…) { [WebMethod] public void SomeMethod(…) { …… } }
Web-Web-услуга –услуга – примерпример
<%@ WebService Language="C#" Class="AddService" %><%@ WebService Language="C#" Class="AddService" %>
using System;using System;using System.Web.Services;using System.Web.Services;
public class AddService : WebServicepublic class AddService : WebService{{
[WebMethod][WebMethod] public int Add(int a, int b)public int Add(int a, int b) {{ return a + b;return a + b; }}
}}
Demo-1-AddService.asmxDemo-1-AddService.asmx
Публикуване на Публикуване на Web Web услугиуслуги Web услугите се изпълняват от Web услугите се изпълняват от
ASP.NET като Web-приложенияASP.NET като Web-приложения Могат да се настройват както Web-Могат да се настройват както Web-
приложенията с файловетеприложенията с файловете Web.configWeb.config и и Global.asaxGlobal.asax
Обикновено се хостват от IIS (Internet Обикновено се хостват от IIS (Internet Information Server)Information Server)
Публикуване на Web услугаПубликуване на Web услуга Копира се директорията на услугата в Копира се директорията на услугата в C:\C:\
Inetpub\wwwrootInetpub\wwwroot Създава се Web Application в IISСъздава се Web Application в IIS Компилира се услугата (ако е необходимо)Компилира се услугата (ако е необходимо)
Демонстрация #1Демонстрация #1 Нашата първа Нашата първа Web Web услугауслуга – –
публикуване и тестванепубликуване и тестване
Използване на Използване на WebWeb услуги услуги В .NET Framework за консумиране на Web В .NET Framework за консумиране на Web
услуги се генерират т. нар. прокси класовеуслуги се генерират т. нар. прокси класове Прокси класоветеПрокси класовете
Генерират се по WSDL дефиницията на Генерират се по WSDL дефиницията на Web услугата (Web услугата (http://http://……/service?wsdl/service?wsdl))
Представляват сорс код на C# (VB.NET, …)Представляват сорс код на C# (VB.NET, …) Преобразуват заявките от .NET към SOAP Преобразуват заявките от .NET към SOAP
заявки и SOAP отговорите към .NETзаявки и SOAP отговорите към .NET Преобразуват .NET типовете в XML и Преобразуват .NET типовете в XML и
обратното (marshalling)обратното (marshalling)
клиентклиент проксипрокси.NET.NET
типоветипове Web Web услугауслугаSOAPSOAPпакетипакети
Генериране на прокси класГенериране на прокси клас Прокси класовете могат да се Прокси класовете могат да се
генерират с инструмента генерират с инструмента wsdlwsdl Пример:Пример:
Резултатът е прокси класът Резултатът е прокси класът AddService.csAddService.cs
За всеки метод За всеки метод XXXXXX се генерират 3 се генерират 3 метода с подходящите параметри:метода с подходящите параметри: XXX(…)XXX(…) – за синхронно извикване – за синхронно извикване BeginXXX(…)BeginXXX(…) и и EndXXX(…)EndXXX(…) – за асинхронно – за асинхронно
извикванеизвикване
wsdl http://localhost/Demo-1-wsdl http://localhost/Demo-1-AddAddService/Demo-1-Service/Demo-1-AddService.asmx?wsdlAddService.asmx?wsdl
Използване на прокси класИзползване на прокси клас Използването на прокси класовете е Използването на прокси класовете е
като обикновените класовекато обикновените класове Инстанцира се прокси класътИнстанцира се прокси класът Извикват му се методитеИзвикват му се методите
Методите могат да предизвикат Методите могат да предизвикат SoapExceptionSoapException или или WebExceptionWebException
При промяна на интерфейса на Web При промяна на интерфейса на Web услугата трябва да се генерира услугата трябва да се генерира отново прокси класътотново прокси класът
AddService addSevice = new AddService();AddService addSevice = new AddService();int sum = addService.Add(5, 6);int sum = addService.Add(5, 6);
Демонстрация #2Демонстрация #2 Използване на Използване на WebWeb услуга услуга
WebWeb услугите и услугите и VS.NETVS.NET Visual Studio .NET Visual Studio .NET има силна има силна
поддръжка за поддръжка за WebWeb услуги услуги Създаване на Създаване на Web Web услугиуслуги
Консумиране на Консумиране на WebWeb услуги услуги Автоматично генериране на прокси Автоматично генериране на прокси
клас по клас по WSDL WSDL описаниетоописанието
Създаване на услуга с Създаване на услуга с VS.NETVS.NET При създаване на нова При създаване на нова WebWeb-услуга -услуга
VS.NET 2003 VS.NET 2003 прави следното:прави следното:1.1. Създава .sln файл:Създава .sln файл:
2.2. Създава виртуална директория в Създава виртуална директория в IISIIS::
3.3. Създава в нея файловете на проекта:Създава в нея файловете на проекта:
C:\Documents and Settings\C:\Documents and Settings\<your user name><your user name>\\My Documents\Visual Studio Projects\My Documents\Visual Studio Projects\<Web<WebServiceServiceName>Name>\\<Web<WebServiceServiceName>Name>.sln.sln
C:\Inetput\wwwroot\C:\Inetput\wwwroot\<WebAppName><WebAppName>
<WebServiceName><WebServiceName>.csproj.csproj, , <WebServiceName><WebServiceName>.asmx.asmx, , <WebServiceName><WebServiceName>.asmx.cs.asmx.cs, , <WebServiceName><WebServiceName>.resx.resx,,Web.configWeb.config, , Global.asaxGlobal.asax, , Global.asax.csGlobal.asax.cs
Демонстрация #3Демонстрация #3 Създаване на Създаване на WebWeb услуга с услуга с VS.NETVS.NET
Демонстрация #4Демонстрация #4 Консумиране на Консумиране на WebWeb услуга с услуга с VS.NETVS.NET
Атрибути за Атрибути за Web Web услугитеуслугите Атрибутът Атрибутът [WebService][WebService]
Задава описание на Web услугатаЗадава описание на Web услугата NamespaceNamespace – задава XML пространство, което – задава XML пространство, което
идентифицира уникално услугатаидентифицира уникално услугата NameName – – име на услугатаиме на услугата DescriptionDescription – текстово описание на услугата – текстово описание на услугата
Атрибутът Атрибутът [WebMethod][WebMethod] Указва, че даден метод е достъпен за Указва, че даден метод е достъпен за
клиентите на Web услугатаклиентите на Web услугата EnableSession=trueEnableSession=true – позволява използване – позволява използване
на сесия (на сесия (SessionSession обекта в обекта в ASP.NETASP.NET)) DescriptionDescription – текстово описание на метода – текстово описание на метода
Атрибути на услугите – примерАтрибути на услугите – пример[WebService([WebService( Description="Demo Web service –Description="Demo Web service – " +" + " " demonstratesdemonstrates complex complex type marshalling.",type marshalling.", Namespace=Namespace=""http://www.devbg.org/services/http://www.devbg.org/services/" +" + ""Demo_5_Service_Types/Demo_5_Service_Types/2004/12/172004/12/17",", Name="Demo 5 - Service Types")]Name="Demo 5 - Service Types")]public class TypesService :public class TypesService : System.Web.Services.WebServiceSystem.Web.Services.WebService{{ ......
[WebMethod([WebMethod( Description="Description="Returns the list ofReturns the list of " +" + ""currently active issuescurrently active issues.",.", EnableSession=true)]EnableSession=true)] public Issuepublic Issue[][] GetIssues() GetIssues() {{ …… }} ......}}
Прехвърляне на типовеПрехвърляне на типове Прехвърлянето на типовете (Прехвърлянето на типовете (type type
marshalling) marshalling) в в .NET Framework .NET Framework се се извършва автоматичноизвършва автоматично Използва се вградената Използва се вградената XMLXML сериализация сериализация
Като параметри и връщана стойност на Като параметри и връщана стойност на методите могат да бъдат използвани:методите могат да бъдат използвани:
ТипТип ОписаниеОписаниеПримитивни Примитивни типоветипове
Например: Например: stringstring, , charchar, , bytebyte, , boolbool, , sbytesbyte, , intint, , uintuint, , longlong, , ulongulong, , shortshort, , ushortushort, , floatfloat, , doubledouble, , decimaldecimal, , ……
Изброени Изброени типоветипове
Например: Например: enum Color {Red, Blue}enum Color {Red, Blue}Предават се като низове. Ползват се Предават се като низове. Ползват се имената на изброените стойности.имената на изброените стойности.
Прехвърляне на типовеПрехвърляне на типове Като параметри и връщана стойност на Като параметри и връщана стойност на
методите могат да бъдат използвани:методите могат да бъдат използвани:
ТипТип ОписаниеОписание
Класове и Класове и структуриструктури
Предават се само публичните полета и Предават се само публичните полета и свойства на класовете и структурите. свойства на класовете и структурите. Поддържат се вложени типове и Поддържат се вложени типове и дървовидни структури, но не и цикли. дървовидни структури, но не и цикли. Трябва да е дефиниран конструктор без Трябва да е дефиниран конструктор без параметри! Ползва се XML сериализация.параметри! Ползва се XML сериализация.Примери:Примери:public struct Pointpublic struct Point{ public int x, y; }{ public int x, y; }public class Studentpublic class Student{{ public int Age {public int Age { getget {…}{…} setset {…}{…} }}
Прехвърляне на типовеПрехвърляне на типове Като параметри и връщана стойност на Като параметри и връщана стойност на
методите могат да бъдат използвани:методите могат да бъдат използвани:
ТипТип ОписаниеОписание
МасивиМасивиМасиви от примитивни типове, изброени Масиви от примитивни типове, изброени типове, класове или структуритипове, класове или структуриНапример: Например: string[]string[], , Color[]Color[], , Point[]Point[]
КолекцииКолекцииКолекции от примитивни типове, Колекции от примитивни типове, изброени типове, класове или структури.изброени типове, класове или структури.Пример: Пример: ICollectionICollection, , ArrayListArrayList, …, …Предават се като масиви.Предават се като масиви.
DataSetDataSet обектиобекти
ADO.NET ADO.NET DataSetDataSet обекти. Предават се обекти. Предават се заедно с XSD схемата, която описва заедно с XSD схемата, която описва структурата им.структурата им.
XmlNodeXmlNode XML фрагменти. Предават се в чист вид.XML фрагменти. Предават се в чист вид.
DeploymentDeployment на на WebWeb услуга услуга Искаме да публикуваме Web-услуга Искаме да публикуваме Web-услуга
МyServiceМyService, която имаме на сорс-код, която имаме на сорс-код1.1. Копираме всички файлове на услугата Копираме всички файлове на услугата
в в C:\Inetpub\wwwroot\MyServiceC:\Inetpub\wwwroot\MyService2.2. От IIS административната конзола От IIS административната конзола
създаваме Web приложение за създаваме Web приложение за виртуалната директория виртуалната директория MyServiceMyService
3.3. Компилираме услугата с VS.NETКомпилираме услугата с VS.NET Ако няма да дебъгваме (например Ако няма да дебъгваме (например
при Release), изтриваме сорс-кода:при Release), изтриваме сорс-кода:del *.cs *.csproj *.resx *.webinfo …del *.cs *.csproj *.resx *.webinfo …
Демонстрация #Демонстрация #55 Прехвърляне на сложни типове – Прехвърляне на сложни типове –
Web Web услугатауслугата
Демонстрация #6Демонстрация #6 Прехвърляне на сложни типове – Прехвърляне на сложни типове –
клиент за клиент за Web Web услугатауслугата
Демонстрация #7Демонстрация #7 Дебъгване на Дебъгване на Web Web услугиуслуги
Моделът на изпълнениеМоделът на изпълнение За всяка заявка към За всяка заявка към Web Web услуга услуга
ASP.NET ASP.NET прави следното:прави следното:1.1. Инстанцира класа на Инстанцира класа на WebWeb-услугата-услугата2.2. Заделя отделна нишка от пулаЗаделя отделна нишка от пула3.3. Изпълнява заявката в тази нишкаИзпълнява заявката в тази нишка4.4. Връща резултата към клиентаВръща резултата към клиента5.5. Връща нишката в обратно пулаВръща нишката в обратно пула6.6. Оставя инстанцията на класа на Оставя инстанцията на класа на
услугата да бъде унищожена от услугата да бъде унищожена от GCGC Заявките се подреждат в опашка и се Заявките се подреждат в опашка и се
изпълняват по няколко едновременноизпълняват по няколко едновременно
Асинхронно извикванеАсинхронно извикване Асинхронното извикване се използва при Асинхронното извикване се използва при
времеотнемащи операции с Web услугивремеотнемащи операции с Web услуги За асинхронни извиквания в прокси класа За асинхронни извиквания в прокси класа
има методи има методи BeginXXX(BeginXXX(…)…) и и EndXXX(EndXXX(…)…) При завършване услугата извиква зададен При завършване услугата извиква зададен
метод за обратно извикване (метод за обратно извикване (callback)callback)public void static Main()public void static Main(){{ AsyncCallback cb = new AsyncCallback(CallFinished);AsyncCallback cb = new AsyncCallback(CallFinished); service.BeginLongProcess(params, cb, service);service.BeginLongProcess(params, cb, service);}}
privateprivate void CallFinished(IAsyncResult asyncResult) void CallFinished(IAsyncResult asyncResult){{ Console.Console.WWriteLine("Async call completed.")riteLine("Async call completed.");;}}
Демонстрация #8Демонстрация #8 Асинхронно извикване на Асинхронно извикване на Web Web услугауслуга
Web Web услуги и работа с данниуслуги и работа с данни Web услугите често се използват за Web услугите често се използват за
достъп до даннидостъп до данни Обикновено се прехвърлят Обикновено се прехвърлят DataSetDataSet
обекти или масиви с данниобекти или масиви с данни Web Web услугата реализира:услугата реализира:
Извличането на данниИзвличането на данни Промяната на данниПромяната на данни
Web Web услугауслуга
Извикване на Web услугаИзвикване на Web услуга Изпълнение нa SQL заявкаИзпълнение нa SQL заявка
Резултат от SQL заявкаРезултат от SQL заявкаXMLXMLDataSetDataSet
Промяна на данниПромяна на даннипрез XMLпрез XML DataSetDataSet Заявки за нанасянеЗаявки за нанасяне
на променитена променитеКлиентКлиентБаза от данниБаза от данни
DBDBDataSetDataSet
Демонстрация #9Демонстрация #9 Достъп до данни през Достъп до данни през Web Web услуга – услуга –
услугатауслугата
Демонстрация #10Демонстрация #10 Достъп до данни през Достъп до данни през Web Web услуга – услуга –
клиентското приложениеклиентското приложение
Поддръжка на сесииПоддръжка на сесии ASP.NET Web ASP.NET Web услугите поддържат услугите поддържат
сесии, както всички сесии, както всички Web Web приложенияприложения SessionSession – – съдържа текущата сесиясъдържа текущата сесия ApplicationApplication – съдържа контекста на – съдържа контекста на WebWeb
приложениетоприложението Разрешаване на сесията при услугата:Разрешаване на сесията при услугата:
Разрешаване на сесията при клиента:Разрешаване на сесията при клиента:
[WebMethod(EnableSession=true)][WebMethod(EnableSession=true)]
MyService myService = new MyService();MyService myService = new MyService();myService.CookieContainer =myService.CookieContainer = new System.Net.CookieContainer();new System.Net.CookieContainer();
Демонстрация #Демонстрация #1111 Използване на сесии – Използване на сесии – Web Web услугауслуга
Демонстрация #Демонстрация #1122 Използване на сесии – клиент за Използване на сесии – клиент за Web Web
услугатауслугата
Сигурност на Сигурност на WebWeb услугите услугите Често пъти се изисква някои методи да Често пъти се изисква някои методи да
не могат да се викат без автентикацияне могат да се викат без автентикация Защитата от неоторизиран достъп може Защитата от неоторизиран достъп може
да се направи по няколко начина:да се направи по няколко начина: Всеки метод да има допълнителни Всеки метод да има допълнителни
параметри (потребител, парола и др.)параметри (потребител, парола и др.) Чрез използване на сесияЧрез използване на сесия Чрез средствата на Чрез средствата на Web Services Web Services
Enhancements Enhancements ((WSE)WSE). . WSE WSE поддържат:поддържат: Криптиране на трафикаКриптиране на трафика Цифрово подписванеЦифрово подписване Автентикация чрез цифрови сертификатиАвтентикация чрез цифрови сертификати
Сигурност чрез сесииСигурност чрез сесии1.1. Добавяме метод за автентикацияДобавяме метод за автентикация на на
потребител:потребител:[WebMethod(EnableSession[WebMethod(EnableSession == truetrue, Description =, Description = "Checks given login and creates a session.")"Checks given login and creates a session.")]]public void Login(string aUser, string aPassword)public void Login(string aUser, string aPassword){{ if ( if ( user/passuser/pass is valid is valid ) ) {{ Session[Session[""useruser""] = aUser;] = aUser; }} elseelse {{ throw new Exception("Ivalidthrow new Exception("Ivalid login login!");!"); }}}}
Сигурност чрез сесииСигурност чрез сесии2.2. Във всеки защитен метод проверяваме Във всеки защитен метод проверяваме
дали има автентикиран потребител:дали има автентикиран потребител:[WebMethod(EnableSession[WebMethod(EnableSession == truetrue, Description =, Description = "This method requires active session.")"This method requires active session.")]]public string GetProtectedData()public string GetProtectedData(){{ string string useruser = (string) Session["user"]; = (string) Session["user"]; if (if (useruser !!= null)= null) {{ return "This is protected data!";return "This is protected data!"; }} elseelse {{ throw new Exception("throw new Exception("Access deniedAccess denied!");!"); }}}}
Демонстрация #Демонстрация #1313 Защита на достъпа до Защита на достъпа до Web Web услуга услуга
чрез сесия – чрез сесия – Web Web услугатауслугата
Демонстрация #Демонстрация #1144 Защита на достъпа до Защита на достъпа до Web Web услуга услуга
чрез сесия – клиент за чрез сесия – клиент за Web Web услугатауслугата
Изключенията в Изключенията в Web Web услугитеуслугите Когато Web услуга хвърли изключение, Когато Web услуга хвърли изключение,
клиентът получава клиентът получава SoapExceptionSoapException Оригиналният тип на изключението се губиОригиналният тип на изключението се губи Губят се вложените (inner) изключенияГубят се вложените (inner) изключения Запазва се текстът (свойството Запазва се текстът (свойството MessageMessage))
За да връщаме информация за За да връщаме информация за проблем, възникнал в Web метод:проблем, възникнал в Web метод: Дефинираме изброен тип (Дефинираме изброен тип (enumenum), ),
съдържащ възможните грешкисъдържащ възможните грешки Връщаме от Web метода код на грешка – Връщаме от Web метода код на грешка –
инстанция на изброения типинстанция на изброения тип Клиентът проверява кода за грешкаКлиентът проверява кода за грешка
Изключенията в Изключенията в Web Web услугитеуслугите[WebMethod][WebMethod]public UserError AddUser(string aUser, string aPass)public UserError AddUser(string aUser, string aPass){{ if ( aUser is invalid )if ( aUser is invalid ) return UserError.InvalidUser;return UserError.InvalidUser; if ( aPass is invalid )if ( aPass is invalid ) return UserError.InvalidPassword;return UserError.InvalidPassword; ...... return UserError.Success;return UserError.Success;}}
public enum UserErrorpublic enum UserError{{ Success,Success, UserAlreadyExists,UserAlreadyExists, InvalidUser,InvalidUser, InvalidPassword,InvalidPassword, DatabaseErrorDatabaseError}}
Web Web услуги с услуги с ASP.NETASP.NET
Въпроси?Въпроси?
УпражненияУпражнения1.1. Какви модели за разпределени приложения Какви модели за разпределени приложения
познавате? Каква е разликата между тях?познавате? Каква е разликата между тях?2.2. Какво представляват Какво представляват WebWeb услугите? Какъв услугите? Какъв
проблем решава тази технология?проблем решава тази технология?3.3. Какво представлява инфраструктурата на Какво представлява инфраструктурата на Web Web
услугите?услугите? От какво се състои?От какво се състои?4.4. Какво представляват Какво представляват UDDIUDDI директориите и за какво директориите и за какво
служат?служат?5.5. Какво е Какво е DISCODISCO и за какво служи? и за какво служи?6.6. Какво е Какво е WSDLWSDL и за какво се използва? и за какво се използва?7.7. Какво е Какво е SOAPSOAP? От какво се състои? За какво се ? От какво се състои? За какво се
използва?използва?8.8. Опишете типични сценарии за използване на Опишете типични сценарии за използване на WebWeb
услуги при услуги при .NET.NET базирани приложения. базирани приложения.
УпражненияУпражнения9.9. Без да използвате VS.NET създайте проста Web Без да използвате VS.NET създайте проста Web
услуга (услуга (asmxasmx файл), която по зададена дата файл), която по зададена дата връща деня от седмицата (на български език). връща деня от седмицата (на български език). Инсталирайте Инсталирайте WebWeb услугата на услугата на IIS.IIS. Тествайте с Тествайте с Internet Explorer. Internet Explorer. Разгледайте Разгледайте WSDLWSDL описанието. описанието.
10.10. Без да използвате VS.NET създайте клиент Без да използвате VS.NET създайте клиент (конзолно приложение) за Web услугата от (конзолно приложение) за Web услугата от предходната задача.предходната задача.
11.11. С помощта на С помощта на VS.NET VS.NET създайте създайте WebWeb услуга, която услуга, която приема 2 символни низа и връща колко пъти приема 2 символни низа и връща колко пъти първият се среща във втория. Дефинирайте първият се среща във втория. Дефинирайте уникален уникален namespacenamespace за за Web Web услугата. Задайте услугата. Задайте подходящо описание на подходящо описание на Web Web методаметода й.й.
12.12. С помощта на С помощта на VS.NET VS.NET създайте клиент за създайте клиент за WebWeb--услугата от предходната задача.услугата от предходната задача.
УпражненияУпражнения13.13. В едно училище учат ученици, разпределени в В едно училище учат ученици, разпределени в
различни класове. Всички ученици от даден клас различни класове. Всички ученици от даден клас изучават някаква съвкупност от учебни предмети изучават някаква съвкупност от учебни предмети и имат по няколко оценки от изпитванията по и имат по няколко оценки от изпитванията по всеки предмет. Проектирайте релационна схема, всеки предмет. Проектирайте релационна схема, която да съхранява информация за учениците, която да съхранява информация за учениците, класовете, учебните предмети и оценките. класовете, учебните предмети и оценките. Реализирайте Реализирайте WebWeb-услуга, която изпълнява -услуга, която изпълнява следните операции (чрез следните операции (чрез SQLSQL команди към БД): команди към БД):
• добавяне/изтриване на класдобавяне/изтриване на клас• добавяне/изтриване/промяна на ученик, добавяне/изтриване/промяна на ученик,
извличане на учениците (от даден клас)извличане на учениците (от даден клас)• добавяне/изтриване на учебен предмет, добавяне/изтриване на учебен предмет,
извличане на уч. предмети (за даден клас)извличане на уч. предмети (за даден клас)• добавяне/изтриване/извличане на оценки (на добавяне/изтриване/извличане на оценки (на
даден ученик по даден предмет)даден ученик по даден предмет)Използвайте свързания модел от Използвайте свързания модел от ADO.NET.ADO.NET.
УпражненияУпражнения14.14. Създайте Създайте Windows FormsWindows Forms клиент за клиент за WebWeb услугата услугата
от предходната задача. Приложението трябва да от предходната задача. Приложението трябва да визуализира класовете и да позволява навигация визуализира класовете и да позволява навигация сред тях. При избор на даден клас трябва да се сред тях. При избор на даден клас трябва да се показват учениците, които го съставят и учебните показват учениците, които го съставят и учебните предмети, които тези ученици изучават. Трябва предмети, които тези ученици изучават. Трябва да се позволява редактиране на учениците и да се позволява редактиране на учениците и учебните предмети за текущия избран клас. При учебните предмети за текущия избран клас. При избор на ученик трябва да се позволява избор на ученик трябва да се позволява редактиране на оценките му по всеки от учебните редактиране на оценките му по всеки от учебните предметите. При всяка редакция трябва да се предметите. При всяка редакция трябва да се извиква извиква WebWeb метод от услугата чрез който метод от услугата чрез който измененията да се нанасят в базата данни. При измененията да се нанасят в базата данни. При промяна на текущия избран клас, трябва да се промяна на текущия избран клас, трябва да се извличат наново учениците и предметите. При извличат наново учениците и предметите. При промяна на избрания ученик трябва оценките му промяна на избрания ученик трябва оценките му да се зареждат наново от да се зареждат наново от Web Web услугата.услугата.
УпражненияУпражнения15.15. Създайте Създайте WebWeb услуга, която по зададено цяло услуга, която по зададено цяло
число число pp ( (pp e e UInt32UInt32) ) намира и връща броя простинамира и връща броя прости числа в интервала числа в интервала [1…p][1…p]. . Услугата би трябвало Услугата би трябвало да работи бавно при големи стойности на да работи бавно при големи стойности на pp.. Създайте Създайте Windows Forms Windows Forms приложение, което приложение, което съдържа текстово поле, бутон и списък. При съдържа текстово поле, бутон и списък. При въвеждане на число в текстовото поле и въвеждане на число в текстовото поле и натискане на бутона трябва да се извиква натискане на бутона трябва да се извиква асинхронно асинхронно WebWeb услугата за пресмятане на услугата за пресмятане на простите числа между простите числа между 11 и и pp. . При завършване на При завършване на асинхронно извикване резултатът трябва да се асинхронно извикване резултатът трябва да се добавя в списъка във формат "добавя в списъка във формат "Primes inPrimes in range range [1…p][1…p] are XXXare XXX"". . Не забравяйте, че асинхронните Не забравяйте, че асинхронните извиквания използват нишки от извиквания използват нишки от Thread PoolThread Pool-а -а на на .NET Framework.NET Framework, които не трябва да достъпват , които не трябва да достъпват директно потребителския интерфейс.директно потребителския интерфейс.
УпражненияУпражнения16.16. Проектирайте релационна схема от таблици в Проектирайте релационна схема от таблици в MS MS
SQL сървър, която описва потребители и правата SQL сървър, която описва потребители и правата им за достъп в дадена система. Всеки потребител им за достъп в дадена система. Всеки потребител се характеризира с име, login и парола и може да се характеризира с име, login и парола и може да има достъп до подмножество от функциите на има достъп до подмножество от функциите на системата. Всяка функция в системата си има системата. Всяка функция в системата си има име и може да е достъпна от подмножество на име и може да е достъпна от подмножество на потребителите. Създайте потребителите. Създайте Web Web услуга, която чрез услуга, която чрез използване на несвързания модел на достъп до използване на несвързания модел на достъп до данни в ADO.NET реализира Web методи за данни в ADO.NET реализира Web методи за извличане на данните (във вид на извличане на данните (във вид на DataSetDataSet) и за ) и за обновяване на променени данни (съдържащи се обновяване на променени данни (съдържащи се в в DataSetDataSet). Реализирайте ). Реализирайте Windows Forms Windows Forms приложение, което позволява редактиране на приложение, което позволява редактиране на потребителите и техните права използвайки потребителите и техните права използвайки Web Web услугата.услугата.
УпражненияУпражнения17.17. Реализирайте системата за управление на Реализирайте системата за управление на
потребители и техните права от предходната потребители и техните права от предходната задача като добавите автентикация в задача като добавите автентикация в WebWeb услугата и защитите методите за достъп до услугата и защитите методите за достъп до данните чрез данните чрез ASP.NETASP.NET сесията. сесията. WebWeb услугата услугата трябва да позволява достъп до защитените трябва да позволява достъп до защитените методи само на потребителя с име методи само на потребителя с име ""adminadmin".". Първоначално създайте този потребител Първоначално създайте този потребител директно в базата данни на ръка.директно в базата данни на ръка.
MSDN Library – MSDN Library – http://msdn.microsoft.comhttp://msdn.microsoft.com Стоян Йорданов, Стоян Йорданов, Web Web услугиуслуги – –
http://www.nakov.com/dotnet/http://www.nakov.com/dotnet/2003/2003/lectures/lectures/Web-Services.docWeb-Services.doc
MSDN Training, MSDN Training, Developing XML Web Services Using Developing XML Web Services Using Microsoft® ASP.NET (MOC 2524B)Microsoft® ASP.NET (MOC 2524B)
Enterprise Application – Enterprise Application – http://c2.com/cgi/wiki?EnterpriseApplicationhttp://c2.com/cgi/wiki?EnterpriseApplication
Consuming a DataSet from an XML Web Service, Consuming a DataSet from an XML Web Service, MSDN Library – MSDN Library – http://msdn.microsoft.comhttp://msdn.microsoft.com
Използвана литератураИзползвана литература