Уеб услуги с asp. Net



страница6/9
Дата24.03.2017
Размер0.86 Mb.
#17693
1   2   3   4   5   6   7   8   9

Използване на уеб услуги


Досега обяснихме как се създават уеб услугите. Тяхното основно предназ­начение обаче е да бъдат "консумирани", т.е. използвани от други приложения. Това се осъществява посредством размяна на SOAP съобще­ния между отдалеченото приложе­ние и уеб услугата.

За да се осъществи това обаче трябва да има механизъм, който да превръща заявките, отговорите и типовете от и към SOAP съобщения. В .NET Framework този механизъм се реализира чрез т. нар. междинни (proxy) класове. Междинните класове стоят между уеб услугата и отдалеченото приложение и вършат работата на преобразувател на SOAP съобщенията.


Междинните (proxy) класове


.NET Framework ни осигурява изключително лесен начин за създаване на междинни класове. Генерирането става автоматично от WSDL дефини­цията на уеб услугата. За примера даден по-рано WSDL дефиницията е достъпна от адрес:

http://localhost/AddService/AddService.asmx?wsdl

Както всеки един клас в .NET Framework, така и междинните класове представляват сорс код на C# (Visual Basic .NET или някой друг език). В действителност ролята на междинните класове е да дадат на потребителя един лесен и типизиран начин за извикване, както синхронно така и асин­хронно, на уеб методи от една услуга.


Генериране на междинен клас


Един лесен начин за генериране на междинни класове е чрез инструмента wsdl. За да генерираме междинен клас за последния пример е достатъчно да отворим Visual Studio .NET 2003 Command Prompt и да напишем:

wsdl http://localhost/AddService/AddService.asmx?wsdl

.NET Framework създава междинния клас за нашата уеб услуга и го поставя във файла AddService.cs. За всеки метод на уеб услугата в този клас се създават по 3 метода. Конкретно за последния пример wsdl генерира следните методи:

public AddService()

{

this.Url = "http://localhost/AddService/AddService.asmx";



}
public int Add(int a, int b)

{

object[] results = this.Invoke("Add", new object[] {



a,

b});


return ((int)(results[0]));

}
public System.IAsyncResult BeginAdd(int a, int b,

System.AsyncCallback callback, object asyncState)

{

return this.BeginInvoke("Add", new object[] {



a,

b}, callback, asyncState);

}
public int EndAdd(System.IAsyncResult asyncResult)

{

object[] results = this.EndInvoke(asyncResult);



return ((int)(results[0]));

}


Add(…) се използва за синхронно извикване, а BeginAdd(…) и EndAdd(…) – за асинхронно извикване на уеб метода. Асинхронните извиквания на уеб услуги ще разгледаме по-късно в настоящата тема.

Използване на междинен клас


По своята същност прокси класовете не се различават от обикновените класове. Използват се по същия начин – първо се инстанцират (създава се обект от прокси класа) и след това се викат неговите методи:

AddService addSevice = new AddService();

int sum = addService.Add(5, 6);



Между извикването на обикновен клас и междинен клас, разбира се има няколко разлики.

Едната от тях е, че извикването може да се забави, тъй като трябва да се осъществи комуникация до отдалечен сървър.

При извикване на методите на междинния клас могат да се получат SoapException или WebException. WebException възниква при проблем с комуникацията с услугата (например ако сървърът е недостъпен), а SoapException възниква, ако е настъпил проблем на сървъра по време на изпълнението на уеб метода (например, ако е настъпило деление на 0).



По време на изпълнение на метод в уеб услугата изключе­нията, които могат да възникнат, могат да са от различен вид (InvalidCastException, DivideByZeroException, ...), но независимо от това при клиентското приложение пристига единствено SoapException, т.е. оригиналното изключение се губи.

В края на темата ще покажем описаният проблем със загубата на оригиналното изключение може да бъде заобиколен по прозрачен начин и при клиента да се получи оригиналното изключение.

Използване на междинен клас – пример


За да демонстрираме консумирането на уеб услуга чрез междинен клас, ще създадем клиентско приложение, което извиква създадената услуга AddService.

За целта на примера създаваме папка, в която ще държим нужните файлове. Нека за конкретност тя да е "E:\Client". Отваряме Visual Studio .NET 2003 Command Prompt и отиваме до папката "E:\Client", след което изпълняваме командата:



wsdl http://localhost/AddService/AddService.asmx?wsdl

В резултат се създава междинният клас AddService.cs. В същата папка създаваме и файла "AddServiceClient.cs" със следното съдържание:

using System;
public class AddServiceClient

{

static void Main()



{

AddService addService = new AddService();

int a = 5;

int b = 6;

int sum = addService.Add(a, b);

Console.WriteLine("{0} + {1} = {2}", a, b, sum);

}

}


За да компилираме приложението, пишем в Command Prompt командата:

csc *.cs

В резултат получаваме компилираното асембли AddServiceClient.exe, което при изпълнение извежда следния резултат:





Сподели с приятели:
1   2   3   4   5   6   7   8   9




©obuch.info 2024
отнасят до администрацията

    Начална страница