Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
METODAT E WEB SERVICE-VE
web service-t & web service method
Web Service - një komponent aplikacioni, iaksesueshëm në mënyrë remote, i cili merr të dhëna ( me http), i përpunon dhe kthen një përgjigje.
Përbëhet nga 2 pjesë logjike: 1. Pika hyrëre (skedari .asmx)2. Kodi që përbën funksionalitet e një web service
Ndërtimi i një web service në 3 hapa:1. Krijimi i një skedari .asmx2. Direktiva @WebService në krye të skedarit3. Krijimi i metodave
Direktiva @WebService
Bashkë me .asmx siguron një url me anë të se cilës mund tëaksesohet nje web service.
Ka 4 atribute:1. Class - Percakton se cila klase do te perbeje web service-n. Kompilohet
heren e pare qe thirrtet web service-i.
2. codeBehind – Percakton nje skedar qe do te perdoret si source code per kompilimin e web service, nese klasa e percaktuar me atributinclass nuk e permban ate.
3. Language – Percakton gjuhen ne te cilen eshte shkruar klasa. I tregohetkompilatorit gjuha qe do te perdoret per kompilim.
4. Debug – Nese true, gjate kompilimit shfaqen simbolet e debug.
Shembull:
<%@ WebService class="RecordStore.Service1" language="C#"
codebehind="RecordStore.Service1.cs" debug="true“
%>
Web service classes and namespaces
System.Web.Services – namespace qe permban klasa per transmetimin e te dhenave midis klientit dhe web service-it.
Perfshin atributet :1. WebService
-Vendoset para deklarimit te klases.
-Percakton namespace-in e nje web service
-Ka 3 cilesi: 1. Name – emri I XML Web Service2. Namespace – namespace ne server3. Description – Pershkrim i web service-it
-Shembull:[WebService (Name="Record Store Web Service",
Namespace="http://www.notashop.com/wscr", Description=“Shembull I nje web service")]
public class Service1 : System.Web.Services.WebService { ⋮ }
2. WebMethod
Web service classes and namespaces
Atributi WebMethod
-Implementon funksionalitetet e nje web service
-Vendoset fjala kyce : WebMethod para nje metode publike
-Pasi krijohet dhe kompilohet, metoda mund te thirret nga nje klient.
-Shembull i nje web method qe llogarit %:
namespace PercentService
public class Service1: {
[WebMethod]
public double CalcPercent(int Percent, double Number) {
double Value = (Number / 100) * Percent;
return Value;
}
}
-shembull i therritjes se metodes:
PercentService.Service1 WebProxy= new PercentService.Service1();
double Total = WebProxy.CalcPercent(25, 5);
Atributi Web Method - Cilesite
1. Description - Percakton nje pershkrim per metoden.
2. MesssageName - Per te shtuar emrin e metodes.
3. Enablesession
- Ben te mundur perdorimin e objekteve session dhe
application per nje web service.
- Nese true, gjendja e sesionit mund te kapet me
HTTPContext.Current.Session. Web service-i dergon
nje session id unike(qe ruhet ne cookie), e cila duhet
te dergohet nga klienti ne kerkesen pasardhese.
Disavantazh: Degradim i performances
4. CacheDuration - Percakton kohen gjate se ciles rezultati I nje web method ruhet ne cache.
Avantazh: Perdoret per te dhenat qe ndryshojne rralle. Web method thirret nje here, dhe ne kerkesat pasardhese me te njejtet parameter, nuk thirret me, por merret rezultati nga cache.
Atributi Web Method - Cilesite
5. Transaction Option- Siguron suport per transaksionet (grup veprimesh
ne nje njesi te vetme logjike) e .NET.
- Systems.EnterpriseServices : namespace per transaksionet
- 5 opsione: Disabled, Not Supported, Supported, Required, RequiresNew
6. BufferResponse - buffer ku ruhet pergjigja derisa ajo tejete e plote. Minimizon komunikimin klient-server. Jo e mire kur pergjigja konsiston ne nje sasi te madhe tedhenash.
Shembull i nje web service
Shembull i nje aplikimi klient (Windows Media Player psh) qeperdor nje web service per te aksesuar te dhenat qe i duhen.
using System.Web.Services.Protocols;
using System.Data.OleDb;
[WebService (
Name="RecordStoreWebService",
Namespace="http://www.notashop.com/wscr",
Description=“Nje web service qe kthen biografine dhe imazhin e
nje CD“ )
]
public class Service1 : System.Web.Services.WebService { }
Perbehet nga 2 web method:1. Nje metode qe kthen biografine e artistit te nje CD.
Metoda te web service shembull
[WebMethod (Description=“Kthen biografine e nje artisti") ]
public string GetBio(string Id) {
OleDbConnection objConnection;
OleDbCommand objCommand;
string [] ArtistBio ; string ArtistB; ArtistBio = new String[10]; string strConnect; string strCommand;
OleDbDataReader DataReader1; int i=1;
strConnect = "Provider=SQLOLEDB.1;Password='';" + "Persist Security Info=True;User ID=sa;" + "Initial
Catalog=dansrecordsSQL;Data Source=CHRISUHOME";
strCommand = "SELECT Biography From Biography WHERE " + "Id='" + Id + "'";
objConnection = new OleDbConnection(strConnect);
objConnection.Open();
objCommand = new OleDbCommand(strCommand, objConnection);
DataReader1 = objCommand.ExecuteReader();
while (DataReader1.Read()) {
ArtistBio[i] = DataReader1.GetString(0).ToString(); i++; }
DataReader1.Close(); objConnection.Close(); ArtistB = ArtistBio[1];
return ArtistB;
}
Metoda qe kthen nje imazh per nje CD
[WebMethod(Description=“Kthen imazhin per nje CD")]
public byte[] GetPic(string Id) {
OleDbConnection objConnection;
OleDbCommand objCommand;
string strConnect;
string strCommand;
strConnect = "Provider=SQLOLEDB.1;Password='';” + "Persist
Security Info=True;User ID=sa;” + "Initial
Catalog=dansrecordsSQL;Data Source=CHRISUHOME";
strCommand = "SELECT CoverPic From AlbumDetails "
+ "WHERE Id = '" + Id + "'";
objConnection = new OleDbConnection(strConnect);
objConnection.Open();
objCommand = new OleDbCommand(strCommand,
objConnection);
OleDbDataAdapter da = new
OleDbDataAdapter(objCommand);
DataSet ds = new DataSet();
da.Fill(ds, "AlbumDetails"); I
nt count = ds.Tables["AlbumDetails"].Rows.Count;
if(count>0) {
Byte[] BLOBPicByteArray = new Byte[0];
BLOBPicByteArray=(Byte[])
(ds.Tables["AlbumDetails"].Rows[count -1]["CoverPic"]);
objConnection.Close();
return BLOBPicByteArray;
}
else {
Byte[] BLOBPicByteArray = new Byte[0];
objConnection.Close();
return BLOBPicByteArray;
}
}
WSDL dhe metodat web
Ekziston nje lidhje midis tyre: Elementevet te percaktuar ne nje web method I korespondojn elemente ne nje doc WSDL.
Pjese nga doc WSDL
<types>
<s:schema elementFormDefault="qualified“ targetNamespace="http://www.notashop.com/wscr"> <s:element name="GetBio">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Id“ type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="GetBioResponse“>
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="GetBioResult“
type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
targetNamespace -namespace qe percaktohette webservice
<messsage> - percaktongjithe tipet qe pranon njeweb service
<portType> - Gruponveprimet, duke perfshire per cdo veprim, nje pershkrim, tipin e inputit dhe outputitte metodes.
Konfigurimi i metodave Web
Skedaret e konfigurimit ndikojne ne menyren se si Web Service-et dhe metodat web funksionojne. Ne .Net perdoren dy skedare kryesore konfigurimi:
Machine.config, ku konfigurohen informacione per serverin dhe perdoret pergjate gjithe aplikacionit. Kyeshte skedari nga i cili marrin konfigurime edheskedaret e tjere te konfigurimit. Ndodhet ne \Windows\Microsoft.Net\Framework\version\Config.
Web.config, qe perdoret per te konfiguruarinformacione specifike per aplikacionin dhe duhet tegjendet ne direktorine kryesore te aplikacionit web.
Menaxhimi i gjendjes
Gjate perdorimit te Web Service-eve, shpesh lind e nevojeshme ruajtja e gjendjes, pra ruajtja e nje informacioni specifik qe do te nevojtet pergjate rrjedhes se funksionimit te aplikacionit.
Disa raste ne te cilat do te lindte e nevojshme ruajtja e gjendjes do te ishin:• Kur nje web Sevice-i i duhet te krijoje lidhje te shumefishta me nje klient
• Kur nje Web Service-i i duhet te mbaje mend, per nje transaksion, gjendjen e secilit proces qe perfshin servisi.
• Kur Web Service-it I duhet informacion nga nje data source
• Kur nje Web Service ec ne nje seri hapash ne nje transaksion qe ka mundesi te behet rollback, ne rast se nje hap deshton etj.
Megjithate rekomandohet qe ruajtja e gjendjes te evitohet sa me shume ne nje aplikacion, sepse shkaktojne ne shume raste ulje te ndjeshme te performances.
Ne Web Servise ruajtja e gjendjes behet pergjithesisht me anen e objekteveApplication dhe Session. Keto dy objekte mund te aksesohen ne dy menyra:1. Duke trasheguar nga klasa WebService qe ndodhet ne namespace-in
System.Web.Services
2. Nepermjet nje objekti HttpContext dhe cilesise se tij Current.
Objektet Application per ruajtjen e gjendjes
public class SetArtist:System.Web.Services.WebService {
[WebMethod]
public string SetArtistName(string Artist) {
Application.Add("Artist", ArtistName);
return ((string) Application["Artist"]);
}
[WebMethod]
public string GetArtistName() {
return((string) Application["Artist"]);
}
}
Sigurojne ruajtjen gjendjes se aplikacionit, duke lejuar ruajtjen e informacionit ne
session pergjate gjithe aplikacionit. Shembull perdorimi:
Aksesimi nepermjet objektit HttpContext, qe me cilesine e tij Current, kthen njerefererence ndaj objektit Application.public class SetTitle:System.Web.Services.WebService{
[WebMethod]public string AddTitle(string Title){
HttpContext ConObj = HttpContext.Current;ConObj.Application["Artist"] =
(string) ConObj.Application["Artist"] + Title;
return ((string) ConObj.Application["Artist"]);
}}
Objektet Session per ruajtjen e gjendjes
Ky ndryshim i vetem duket dhe ne kodin e meposhtem:
public class SetArtist:System.Web.Services.WebService
{
[WebMethod(EnableSession = True)]
public string SetArtistName(string Artist)
{
Session.Add("Artist", ArtistName);
return ((string) Session["Artist"]);
}
[WebMethod(EnableSession = True)]
public string GetArtistName()
{
return((string) Session["Artist"]);
}
}
public class SetTitle:System.Web.Services.WebService
{
[WebMethod(EnableSession = True)]
public string AddTitle(string Title)
{
HttpContext ConObj = HttpContext.Current;
ConObj.Session["Artist"] =
(string) ConObj.Session["Artist"] + Title;
return ((string) ConObj.Session["Artist"]);
}
}
Megjithate, perdorimi i objektit Session nuk jep njezgjidhje optimale, sepse sa here qe thirret njeWeb Service, krijohet nje session i ri.
Jane te ngjashme me objektet Application, vetem se duhet te behen enable ne
menyre eksplicite duke i dhene vleren True cilesise EnableSession te Web metodes.
Perdorimi i Cookies
Menyra tjeter per te ruajtur gjendjen ne klient eshte
nepermjet ruajtjes se informacionit ne cookies dhe
perfshirja e tyre ne cdo kerkese. Kjo realizohetnepermjet
ruajtjes se informacionit ne objektet Response dheRequest
qe mund te aksesohen nga objekti Context. Kjoilustrohet
ne kodin e meposhtem:
public class SetArtist:System.Web.Services.WebService
{
[WebMethod]
public string SetArtistName(string Artist)
{
HttpCookie CustomCookie = new HttpCookie("artist");
CustomCookie.Values.Add("Artist", "The Monkees");
Context.Response.AppendCookie(CustomCookie)
}
Kodi per terheqjen e informacionit:
[WebMethod]
public string GetArtistName()
{
HttpCookie CustomCookie = Context.Response.Cookies("artist");
if(cookie.Values["artist"] == "The Monkees")
{
string message = "I'm a believer";
}
return message;
}
Megjithate, Cookies ofrojne nje zgjidhje te mire
vetem ne rastin kur jemi te sigurt qe klienti nuk i
c’aktivizon cookies ne browser-in e tij, dhe ne
rastin kur nuk kerkohet qe informacioni te jete i
sigurt.
Web Service-et asinkrone
Si default kerkesat e klienteve ndaj web service-eve trajtohen ne menyre sinkrone, por web service-et mund te ofrojne dhe menyrenasinkrone te procesimit. Pra klientet nuk vendosen ne pritje pas berjes se kerkeses ndaj web service-it, nqs pergjigjia nuk eshtevendimtare per vazhdimesine e eksekutimit te aplikacionit web.
Procesimi asinkron mund te jete i nevojshem per shembull, ne rastin e situatave qe perfshijne transaksione apo perdorimin e user interface-it, ky i fundit do te ‘ngrinte’ nqs do te pritej.
Kerkesat asinkrone nuk ndikojne ne menyren e ekzekutimit te web metodave.
Realizimi i metodave asinkrone
Perdoret cilesia OneWay qe eshte pjese e atributit SoapRpcMethod.
Vendosja e OneWay=True i jep mundesine klientit qe te mos prese per nje pergjigje qe do tevonoje derisa te perfundoje procesimi i Web Service-it.
Web service-i e realizon kete duke kthyer nje kod 202 statusi HTTP , qe i tregon klientit qeprocesi ka nisur dhe se ai nuk eshte e nevojshme te prese. Nga ana tjeter Web service-i ruannje vlere ne database, qe mund te rimerret ne nje moment te mevonshem.
Perdorimi i OneWay mund te ilustrohet ne perdorimin e nje gjeneratori numrash random. NjeWeb Service qe realizon gjenerimin e mijera numrash random mund te kerkoje ore qe teperfundoje, dhe klienti nuk ka pse te prese:
public class GenerateRandomNumber: WebService { [SoapRpcMethod(OneWay=true)]
[WebMethod]
public void Generate() {
//Logic for generating random number sequences
}
Kjo nuk eshte nje zgjidhje optimal, sepse nuk mund te identifikohet ne menyre te sakte se ciliservis e nisi procesin. Mund te idetifikohet nje perdoruesi te caktuar, por mund te ndodhe qe injejti perdorues te beje disa thirrje ndaj web service-it.
Nje menyre zgjidhjeje eshte ndarja e punes.
Ndertimi i disa web metodave qe kryejne detyra te ndryshme .
Brenda web service-it. Nje detyre niset nga nje metode dhe perfundohet nga njetjeter.
Threading
Perdorimi i disa metodave, ben qe te linde detyra e garantimit te nje metode te sigurt te aksesimit te informacionit.
Duhet te sigurohet aksesi ekskluz i burimeve nga ana e metodave ne nje moment te caktuar, nepermjet procedurave te bllokimeve
WS-Routing
WS-Routing eshte nje protokoll i bazuar ne SOAP qe lejon dergimin e mesazheveSOAP ne menyre asinkrone. Ai shton informacion qe pershkruan pathet e rruges se mesazhit tek header-i.
Ndertimi i versioneve me XSLT
XSLT (Extensible Stylesheet Language Transformations) eshte nje gjuhe qe jep mundesine e ndertimit te style sheet-eve qe transformojne nje dokument XML ne nje tjeter.
Ajo perdoret shume mire per ndertimin e versioneve ne rastin e Web Service-eve, per shembullper skemat e tyre.
Ndertimi i versioneve per dokumentat XML realizohet ne 2 menyra:
1. Shtimi i atributit te versionit ne
dokumentin XML<?xml version="1.0"?>
<album version="1.1">
<title>
<titlename>
Rated R
</titlename>
</title>
</album>
2. Duke vendosur informacionin
e versionit ne namespace<?xml version="1.0"?>
<album
xmlns="http://www.notashop.co
m/wscr/albums/1.1">
<title>
<titlename>
Rated R
</titlename> </title>
</album>
Pasi kemi 2 versione te nje dokumenti XML, XSLT ekzekuton transformimet per te bere
upgrade.
Exceptions
Kur ndodh nje error ne Web Service realizohen keto veprime:
• .NET kap gabimin e ndodhur
• Informacioni i error-it perfshihet ne nje mesazh SOAP
• Kur klienti merr mesazhin SOAP, hidhet nje exception i tipit
SoapExcetion
Per me shume informacion mbi gabimin mund te kontrollohet
objekti StackTrace.
Exception eshte mire te parashikohen dhe trajtohen qe ne web
metodat duke marre parasysh te gjitha rastet e deshtimit. Per
shembull ne rastin e marrjes se inputit te perdoruesit do
ndertohej kodi I meposhtem:
Exceptions
Kur ndodh nje error ne Web Service realizohen keto veprime:•.NET kap gabimin e ndodhur•Informacioni i error-it perfshihet ne nje mesazh SOAP•Kur klienti merr mesazhin SOAP, hidhet nje exception i tipit SoapExcetion
Per me shume informacion mbi gabimin mund te kontrollohet objekti StackTrace.
Exception eshte mire te
parashikohen dhe trajtohen qe
ne web metodat duke marre
parasysh te gjitha rastet e
deshtimit.
Per shembull ne rastin e marrjes
se inputit te perdoruesit do
ndertohej kodi i meposhtem:
[WebMethod]
public string Input(string userInput){ int
amount;
switch(userInput)
{ case 1:
amount=1;
break;
case 2:
amout=20;
break;
case 3:
amount=30;
break;
default:
throw new SoapException("Invalid
Amount supplied",
SoapException.ClientFaultCode); }
Error Logging
.NET te lejon te aksesosh te dhenat log mbi sigurine, sistemin dhe aplikacionit, nepermjet klases EventLog, qe ndodhet ne amespace-in System.Diagnostics. mund tubesh log error-eve duke I vendosur Brenda nje try/catch.
Shembull perdorimi:
[WebMethod]public void ErrorLogging() {
try {
int[] testarray = new int[5];
for(int i=0; i++; i<=10) {
testarray[i] = i+1;
}
}
catch (Exception err) {
EventLog Applog = new EventLog();
Applog.Source = "ErrorGenerator";
Applog.WriteEntry(err.Message, EventLogEntryType.Error); }}
Kur shtohen me shume elemente se sa permban tabela, hidhet nje exception dhepermbajtja e error-it vendoset ne nje object EventLog. Cilesia Source e objektitEventLog lejon te specifikosh emrin e aplikacionit qe do te hedhe error-in.
Disa prej cilesive te klases EventLog jane:
EnableRaisingEvents , Entries, Log, LogDisplayName, MachineName, Source, SynchronizingObject
Disa prej metodave te klases EventLog jane:
BeginInit, Clear, Close, CreateEventSource, Delete, DeleteEventSource etj
Per te marre informacon nga error log mund te ndertohet nje tjeter metode qe kthente dhenat nga objekti EventLog. Shembulli popullon nje tabele me te dhenat e ketijobjekti[WebMethod]
public void RetrieveLog() {
EventLog log = new EventLog("Application1");
string[][] ErrorLogArray = new string[10][2];
int i=0;
foreach (EventLogEntry entry in log.Entries) {
if (entry.Source == "ErrorGenerator") {
ErrorLogArray[i][0] = entry.Message;
ErrorLogArray[i++][1] = entry.TimeGenerated;
}
}
Klasa EventLog
Zbulimi i Web Service-it
Pasi eshte ndertuar Web Service-i, ai nuk eshte akoma plotesisht
funksional.
Ai duhet te regjistrohet ne UDDI ose DISCO qe te mund te kerkohet dhe
te gjendet nga personat qe do e perdorin ate.
Nqs servisi do te aksesohet nga publiku I gjere, eshte mire te perdoret
UDDI.
DISCO mund te perdoret per te kontrolluar nese servisi eshte i
kerkueshem dhe aksesueshem ne vete serverin tone.
DISCO funksionon me mire ne nivel kerkimi local. Nje avantazh tjeter i
DISCO ndaj UDDI eshte se nuk kerkon regjistrim ne Misrosoft Server.
Nqs kerkimi dhe aksesimi I web service-it duhet te jete ne nje hapesire
me te gjere, e hapur ndaj publikut, duhet te perdoret UDDI
DISCO
Per te perdorur skedaret .vsdisco, duhet te behet enable zbulimi dinamik ne skedarin machine.config duke hequr komentin ne rreshtin .NET 1.0:
<!-- <add verb="*" path="*.vsdisco" type="System.Web.Services.Discovery.DiscoveryRequestHandler, Œ System.Web.Services, Version=1.0.3300.0, Culture=neutral, Œ PublicKeyToken=b03f5f7f11d50a3a" validate="false"/>-->
Mund te krijojme edhe vete nje document per zbulim dinamik (.disco file).
Shtohet nje element i ri tek web Service Project -> Static Discovery File
Dokumenti do te ngjante si me poshte:
<?xml version="1.0"?>
<discovery xmlns="http://schemas.xmlsoap.org/disco/">
<contractRef ref=" http://www.notashop.com/wscr/07/disco/service1.asmx?wsdl" docRef=" http://www.notashop.com/wscr/07/disco/service1.asmx" xmlns="http://schemas.xmlsoap.org/disco/scl/" />
<discoveryRef ref="http://www.notashop.com/wscr/07/disco/simple/default.disco" />
<discoveryRef ref="http://www.notashop.com/wscr/07/disco/soap/default.vsdisco" />
<schemaRef ref="http://www.notashop.com/wscr/07/disco/soap/schema.xsd" />
</discovery>
<contractRef>, specifikon servisin qe duam te bejme
<discoveryRef> referon tek dokumete te tjera zbuluese
<schemaRef> perdoret per tu lidhur me skemen e web service-it
DISCO