Web Services
Un serviciu web este o aplicație care poate fi accesată din World Wide Web.
Aceste servicii sunt de regulă disponibile non stop și folosesc diverse standarde de comunicare și de apelare.
Cele mai des întâlnite sunt XML și JSON. Serviciile web sunt larg răspândite iar în softwareul modern cele mai multe aplicații sunt dezvoltate în Paradigma Software As a Service.
La o scara mai restrânsă, adică un micro-serviciu web într-o pagină web, dezvoltarea site-urilor prin AJAX permite realizarea unor pagini interactive dar și rapide.
Dacă după o acțiune a utilizatorului avem nevoie de un răspuns din partea serverului, în loc să facem PostBack (HttpRequest) , putem să apelăm serviciul din pagină.
Pentru a enabla într-o pagina web ASP serviciile web trebuie să introducem tagul ScriptManager și să setăm EnablePageMethods = true. Vă recomand să faceți asta în master page.
<asp:ScriptManager ID="scm" runat="server" EnablePageMethods="true" />
Exemplu
[WebMethod]
public static string GetTimeOnServer()
{
return DateTime.Now.ToString();
}
Trebuie doar sa punem atributul [WebMethod] pentru a transforma o metoda într-un micro serviciu.
Pe partea de front-end pentru a folosi serviciul am creat un textbox si un buton. La apăsarea butonului textbox-ul va fi updatat cu noua valoare primită de la server.
<input type="text" id="myTextBox"/>
<input type="button" onclick="getServerTime()" value="Time" />
//javascript
function getServerTime() {
PageMethods.GetTimeOnServer(onSucess, onError);
function onSucess(result) {
document.getElementById('myTextBox').value = result;
}
function onError(result) {
document.getElementById('myTextBox').value = "Something wrong.";
}
}
Exercițiu
Realizați un formular cu două dropdown lists. În primul se poate selecta un nume de județ. Al doilea va fi updatat automat printr-un serviciu web cu numele orașelor din acel judet. Minim 3 județe.
Update 4 decembrie:
function GetOrase() {
var judet = document.getElementById('judet').value
PageMethods.GetOrase(judet, onSucess, onError);
function onSucess(result) {
var x = document.getElementById("oras");
for (var i = x.options.length - 1; i >= 0; i--) {
x.remove(i);
}
for (var i = 0; i < result.length; i++) {
var option = document.createElement("option");
option.text = result[i];
x.add(option);
}
}
function onError(result) {
}
}
protected static Dictionary Orase = new Dictionary() {
{ "Arges", new string[] {"Pitesti","Curtea de Arges","Campulung","Mioveni" } },
{ "Ilfov", new string[] { "Otopeni","Voluntari"} },
{ "Bucuresti", new string[] { "Sector1","Sector2","Sector3","Sector4","Sector5","Sector6"} }
};
protected void Page_Load(object sender, EventArgs e)
{
}
[WebMethod]
public static string[] GetOrase(string judet)
{
return Orase[judet];
}