Publikoval Michal Kočí dňa 8.5.2008 o 16:56 v kategórii Silverlight
Použitie webových služieb je jedna z možností ako komunikovať so serverom (iné spôsoby som popísal v predchádzajúcom príspevku Silverlight 2.0 - Komunikácia so serverom). Tento príspevok Vám ukáže, ako použiť webové služby vo Vašej Silverlight aplikácii.
Vytvorenie webovej služby
Ako prvé si vytvoríme webovu službu, príkladom bude jednoduchá webová služba vracajúca objekt nami vytvorenej triedy Client:
namespace CommunicationServer
{
public class Client
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
}
Webová služba bude poskytovať metódu GetClientById, ktorá nájde klienta podľa identifikátora a vráti ho:
using System.Collections.Generic;
using System.Linq;
using System.Web.Services;
namespace CommunicationServer
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class ClientService : System.Web.Services.WebService
{
[WebMethod]
public Client GetClientById(int id)
{
var clients = GetClients();
var client = clients.Where(c => c.Id == id).Single();
return client;
}
private List<Client> GetClients()
{
var clients = new List<Client>()
{
new Client() { Id=1, Name="John Smith", Address="Washington" },
new Client() { Id=2, Name="Eric Smith", Address="New York" }
};
return clients;
}
}
}
Pridanie referencie do Silverlight aplikácie
Postup je podobný tomu, keď chcete použiť webovú službu v štandardnej .Net aplikácii. Najskôr si musíte pridať referenciu na webovú službu, aby sa Vám vytvorila Proxy trieda zabezpečujúca komunikáciu s webovou službou. Kliknite pravým tlačidlom na Silverlight projekt a vyberte si položku Add Service reference...
V zobrazenom dialógu kliknite na šipku na tlačítku Discover a vyberte si položku Services In Solution
Následne si vyberte Vašu webovú službu (ClientService.asmx) a nastavte Namespace (Services)
Zavolanie webovej služby
Zavolanie metódy webovej služby je jednoduché a robí sa prostredníctvom vygenerovanej proxy. Ako u iných spôsobov komunikácie so serverom, aj pri webových službách prebieha komunikácia asynchrónne. Metóda CallWebService je metódou, ktorá vytvorí proxy objekt, prihlási sa k odberu udalosti GetClientByIdCompleted, ktorý nastane keď dobehne volanie webovej metódy. V metóde ktorá túto udalosť spracováva potom skontrolujete či požiadavka nebola stornovaná a či nenastala žiadna chyba. Ak všetko prebehlo v poriadku, tak vo vlastnosti Result nájdete návratovú hodnotu metódy - v tomto prípade objekt typu Client
private void CallWebService()
{
Services.ClientServiceSoapClient client = new Services.ClientServiceSoapClient();
client.GetClientByIdCompleted +=
new EventHandler<Services.GetClientByIdCompletedEventArgs>(Client_GetClientByIdCompleted);
client.GetClientByIdAsync(1);
}
void Client_GetClientByIdCompleted(object sender, Services.GetClientByIdCompletedEventArgs e)
{
if (e.Cancelled == false && e.Error == null)
{
Services.Client client = e.Result;
}
}
Záver
Isto ste si všimli, že volanie je asynchrónne a že sa veľmi nápadne podobá na použitie triedy WebClient. V Silverlight aplikácii je proste ozaj ľahké komunikovať so serverom pomocou webových služieb.
Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.