Jakub Binkowski Visual C# MVP webEFS sp.j.
GET i POST
Jak przekazać do JavaScriptu listę filmów? Jak zwrócić do serwera posortowaną listę?
KLIENTSERWER GET /Default.aspx POST /Default.aspx
1. Klient prosi o stronę. 2. Serwer generuje stronę. Dane serializuje do formatu JSON i umieszcza w ukrytym polu formularza. 3. Klient otrzymuje stronę. 4. Skrypt po załadowaniu strony deserializuje dane do postaci obiektowej.
Tekst: "Ala ma kota" Tablica: [1,2,3,4] Obiekt złożony: {fullname: "Jan Kowalski", age: 15, pets: [ {species: "dog", name: "Klops"}, {species: "goldfish", name: "Ryba"} ]}
1. Klient przed wysłaniem formularza serializuje dane do formatu JSON. Umieszcza je w ukrytym polu. 2. Formularz wysyłany jest na serwer. 3. Serwer deserializuje dane z formatu JSON do postaci obiektowej.
Po stronie serwera (ASP.NET): JavaScriptSerializer (Sys.Serialization) Po stronie klienta (JavaScript): JavaScriptSerializer (System.Web.Script.Serialization)
Dane początkowe
Jak przekazać kontrolce Silverlight listę filmów do odtworzenia?
1. Serwer serializuje dane do formatu JSON i umieszcza w ukryty polu formularza. 2. Kontrolka Silverlight otrzymuje w parametrach nazwę pola z danymi. 3. Silverlight odczytuje dane i je deserializuje do postaci obiektowej.
Umieszczane wewnątrz tagu : Odczyt w Silverlight w App.xaml: private void Application_Startup( object sender, StartupEventArgs e) { var url = e.InitParams["url"]; }
Klasa DataContractJsonSerializer (namespace: System.Runtime.Serialization.Json assembly: System.ServiceModel.Web) Dostęp do elementu HTML: HtmlPage.Document.GetElementById("elementID")
AJAX Web Services
Jak dodać komentarz, nie przerywając oglądania filmu?
KLIENTSERWER GET /Default.aspx POST /Default.aspx AJAX: /Service.svc …
Działanie: 1. Z poziomu JavaScript wywołujemy metodę WebServiceu 2. Otrzymujemy dane 3. Wyświetlamy dane na stronie Posługujemy się obiektami (przesyłane jako XML lub JSON) Z kodu JavaScript sprowadza się do wywołania zwykłej metody
[WebService(Namespace = " [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class CatalogService : System.Web.Services.WebService { [WebMethod] public IList FindProducts(string filter) { //logika... }
Demo.CatalogService.FindProducts( 'blue', FindProducts_success, FindProducts_error); function FindProducts_success(results) { //pokaż produkty } function FindProducts_error(error) { //poinformuj o błędzie }
Metoda WebServiceu zawarta w stronie: [WebMethod] public static string[] GetComments() { return DataRepository.GetComments(); } Konfiguracja ScriptManagera: EnablePageMethods="true" Odwołanie z JavaScript: PageMethods.GetComments( GetComments_Success, GetComments_Error)
Sterowanie aplikacji Silverlight z poziomu JavaScriptu
Jak z poziomu JavaScript sterować odtwarzaczem?
Silverlight może udostępnić następujące elementy klasy: właściwości metody Zdarzenia Udostępnianie obiektu: HtmlPage.RegisterScriptableObject( "mediaPlayer", this);
Właściwość: [ScriptableMember] public double Volume { get; set;} Dostęp z JavaScript: var volume = get('silverlightControlHost').Content.mediaPlayer.Volume; get('silverlightControlHost').Content.mediaPlayer.Volume = volume + 0.1;
Właściwość: [ScriptableMember] public void Play(string url) {...} Dostęp z JavaScript: get('silverlightControlHost').Content.mediaPlayer.Play("vid.wmv");
Zdarzenie: [ScriptableMember] public event EventHandler MediaChanged; (tylko EventHandler i EventHandler ) Podłączanie się: $get('silverlightControlHost').Content.mediaPlayer.MediaChanged = playerMediaChanged; $get('silverlightControlHost').Content.mediaPlayer.addEventListener('MediaChanged', playerMediaChanged);
Web Services
Chcę móc śledzić ilość odtworzeń filmów…
Po stronie serwera – usługa WCF Po stronie klienta – proxy do usługi Tylko wywołania asynchroniczne
Tylko basicHttpBinding Odwołania tylko do domeny, z której pobraliśmy aplikację Chyba że…
Odwoływanie się do JavaScriptu z poziomu Silverlight
Dostajemy aktualną ilość odtworzeń, ale jak ją wyświetlić na stronie?
HtmlPage.BrowserInformation Informacje o przeglądarce HtmlPage.Document Dostęp do dokumenty HTML (DOM) HtmlPage.Window Dostęp do okienka przeglądarki HtmlPage.Plugin Element, w którym osadzona jest kontrolka Silverlight.
GetProperty SetProperty Invoke InvokeSelf ConvertTo
GetElementById QueryString Submit …
Alert, Confirm, Prompt Navigate …
Powiadomienia on-line z serwera
KLIENTSERWER Czy ktoś coś napisał? Nie Czy ktoś coś napisał? Nie Czy ktoś coś napisał? JK: Nigdy nas nie przekonają, że białe jest białe, a czarne jest czarne!
KLIENTSERWER Informuj mnie o nowych wiadomościach Bill: 640K ought to be enough for anybody Steve: Developers! Developers!… Close
Przekazywanie stanu przy GET i POST Odwołania asynchroniczne Współpraca po stronie klienta JavaScript Silverlight