Silverlight 2.0 - Komunikácia so serverom

Publikoval Michal Kočí dňa 7.5.2008 o 23:00 v kategórii Silverlight

Občas Vaša Silverlight aplikácia potrebuje komunikovať so serverom, nie len Vašim, ale aj iným. Aké sú možnosti komunikácie je obsahom tohto príspevku.

Typy komunikácie

Komunikáciu so serverom môžeme v zásade rozdeliť na 3 typy v závislosti na tom, čo je cieľom komunikácie:

  1. Komponenta potrebuje zo servera niečo načítať,
  2. Komponenta potrebuje na servera niečo odoslať,
  3. Kombinácia oboch predchádzajúcich typov.

No a na každý z týchto typov sa hodí iný prístup.

Stiahnutie súboru alebo načítanie informácie zo servera

Ak potrebujete stiahnuť zo servera súbor, potom máte najmä tieto možnosti:

  • Použiť metódu DownloadStringAsync triedy System.Net.WebClient ak potrebujete zo servera stiahnuť textový súbor ako string.
  • Použiť metódu OpenReadAsync triedy System.Net.WebClient ak potrebujete zo servera stiahnuť textový alebo binárny súbor ako Stream.
  • Použiť triedu System.Net.WebRequest ak chcete na server odoslať požiadavku, ktorú chcete mať plne pod kontrolou (napríklad ak chcete nastaviť jej hlavičky apod.).
  • Použiť webové služby v prípade, že máte na servery webovú službu, ktorá Vám poskytuje dáta ktoré potrebujete.

Odoslanie dát alebo informácie na server

Ak potrebujete na server odoslať dáta alebo informácie, potom máte najmä tieto možnosti:

  • Použiť triedu System.Net.WebRequest ak chcete na server odoslať dáta ako obsah HTTP požiadavky.
  • Použiť webové služby v prípade, že máte na servery webovú službu, ktorej môžete odoslať dáta ktoré potrebujete odoslať.

Odoslanie aj stiahnutie informácie

Ak potrebujete na server odoslať informácie a dostať aj odpoveď, potom máte najmä tieto možnosti:

  • Použiť triedu System.Net.WebRequest ak chcete na server odoslať dáta ako obsah HTTP požiadavky a odpoveď dostať ako odpoveď HTTP požiadavky.
  • Použiť webové služby v prípade, že máte na servery webovú službu, ktorej môžete odoslať dáta ktoré potrebujete odoslať a ktorá Vám vráti informácie, ktoré potrebujete.

WebRequest a webové služby

Ukážku použitia triedy WebRequest nájdete v mojom predchádzajúcom príspevku - Silverlight 2 - Nahratie súboru na server. Použitiu webových služieb by som sa chcel venovať v jednom z mojich ďaľších príspevkov.

WebClient

Ako iné, aj táto komunikácia prebieha asynchrónne. Ak potrebujete stiahnuť dáta ako text, prihláste sa k odberu udalosti DownloadStringCompletedEventHandler a v ošetrujúcej metóde (v ukážke je to metóda Client_DownloadStringCompleted) spracujte e.Result, čo je v tomto prípade vlastnosť typu string obsahujúca Vami požadovaný dokument. Samotný download spustíte zavolaním metódy DownloadStringAsync, ktorej predáte URI súboru, ktorý chcete stiahnuť a načítať.

private void WebClientForTextData()
{
    Uri uri = new Uri("http://localhost/SL/Data.xml");
 
    WebClient client = new WebClient();
    client.DownloadStringCompleted += 
        new DownloadStringCompletedEventHandler(Client_DownloadStringCompleted);
    client.DownloadStringAsync(uri);
}
 
void Client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    if (e.Cancelled == false && e.Error == null)
    {
        string data = e.Result;
    }
}

Ak potrebujete stiahnuť dáta binárne, postupte je veľmi podobný. Prihláste sa k odberu udalosti OpenReadCompleted a v ošetrujúcej metóde (v ukážke je to metóda Client_OpenReadCompleted) spracujte e.Result, čo je v tomto prípade vlastnosť typu Stream obsahujúca Vami požadovaný dokument. Samotný download spustíte zavolaním metódy OpenReadAsync, ktorej predáte URI súboru, ktorý chcete stiahnuť a načítať.

private void WebClientForBinaryData()
{
    Uri uri = new Uri("http://localhost/SL/Image.png");
 
    WebClient client = new WebClient();
    client.OpenReadCompleted += new OpenReadCompletedEventHandler(Client_OpenReadCompleted);
    client.OpenReadAsync(uri);
}
 
void Client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
    if (e.Cancelled == false && e.Error == null)
    {
        Stream data = e.Result;
    }
}

Záver

Komunikácia so serverom je jednoduchá a ukrýva nespočítateľné možnosti pre Vaše aplikácie. Nezabudnite však vždy zvážiť, či dáta chcete sťahovať alebo môžu byť súčasťou aplikácie. Ak ich chcete sťahovať, podľa účelu si teraz budete vedieť vybrať ten správny prístup.

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

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.