490 likes | 597 Views
Jakub Binkowski. Komunikacja w świecie Web ASP.NET JavaScript Silverlight. Jakub Binkowski Visual C# MVP webEFS sp.j. Agenda. ?. ASP.NET JavaScript. GET i POST. Problem Sortowanie playlisty. Jak przekazać do JavaScriptu listę filmów? Jak zwrócić do serwera posortowaną listę?.
E N D
Jakub Binkowski Komunikacja w świecie WebASP.NET JavaScriptSilverlight Jakub Binkowski Visual C# MVP webEFS sp.j.
Agenda ?
ASP.NET JavaScript GET i POST
ProblemSortowanie playlisty Jak przekazać do JavaScriptu listę filmów? Jak zwrócić do serwera posortowaną listę?
HTTP Klient Serwer GET /Default.aspx POST /Default.aspx
Przekazywanie danychASP.NET JavaScript • Klient prosi o stronę. • Serwer generuje stronę.Dane serializujedo formatu JSON i umieszcza w ukrytym polu formularza. • Klient otrzymuje stronę. • Skrypt po załadowaniu strony deserializujedanedo postaci obiektowej.
JavaScriptObjectNotation(JSON) • 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"}]}
Zwracanie danych danychJavaScript ASP.NET • Klient przed wysłaniem formularza serializuje dane do formatu JSON.Umieszcza je w ukrytym polu. • Formularz wysyłany jest na serwer. • Serwer deserializuje dane z formatu JSON do postaci obiektowej.
Serializacja JSON • Po stronie serwera (ASP.NET): • JavaScriptSerializer(Sys.Serialization) • Po stronie klienta (JavaScript): • JavaScriptSerializer(System.Web.Script.Serialization)
ASP.NET Silverlight Dane początkowe
ProblemPrzekazanie listy odtwarzania do SL Jak przekazać kontrolce Silverlight listę filmów do odtworzenia?
Schemat • Serwer serializuje dane do formatu JSON i umieszcza w ukryty polu formularza. • Kontrolka Silverlightotrzymuje w parametrach nazwę pola z danymi. • Silverlight odczytuje dane i je deserializuje do postaci obiektowej.
Parametry inicjalizacyjne • Umieszczane wewnątrz tagu <object>:<paramname="initParams"value="volume=1,url=video.vmv"/> • Odczyt w Silverlight w App.xaml:privatevoidApplication_Startup(objectsender, StartupEventArgs e){varurl = e.InitParams["url"];}
Serializacja JSON w Silverlight • Klasa DataContractJsonSerializer(namespace: System.Runtime.Serialization.Jsonassembly: System.ServiceModel.Web) • Dostęp do elementu HTML:HtmlPage.Document.GetElementById("elementID")
ASP.NET JavaScript AJAX Web Services
ProblemKomentowanie oglądanego filmu Jak dodać komentarz, nie przerywając oglądania filmu?
HTTP + AJAX Klient Serwer GET /Default.aspx AJAX: /Service.svc XML / JSON … POST /Default.aspx
AJAX Web Services - działanie • Działanie: • Z poziomu JavaScript wywołujemy metodę WebService’u • Otrzymujemy dane • 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
1) WebService [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] publicclassCatalogService : System.Web.Services.WebService { [WebMethod] publicIList<Product> FindProducts(stringfilter) { //logika... } }
2) Konfiguracja ScriptManager <asp:ScriptManagerrunat="server"> <Services> <asp:ServiceReferencePath="~/CatalogService.asmx"/> </Services> </asp:ScriptManager>
3) JavaScript <scripttype="text/javascript"> Demo.CatalogService.FindProducts( 'blue', FindProducts_success, FindProducts_error); functionFindProducts_success(results) { //pokaż produkty } functionFindProducts_error(error) { //poinformuj o błędzie } </script>
PageMethods • Metoda WebService’u zawarta w stronie:[WebMethod]publicstaticstring[] GetComments(){returnDataRepository.GetComments();} • Konfiguracja ScriptManagera:EnablePageMethods="true" • Odwołanie z JavaScript:PageMethods.GetComments(GetComments_Success, GetComments_Error)
JavaScriptSilverlight Sterowanie aplikacji Silverlight z poziomu JavaScriptu
ProblemSterowanie odtwarzaczem Jak z poziomu JavaScript sterować odtwarzaczem?
Udostępnianie dla JavaScript • 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ści • Właściwość:[ScriptableMember]publicdoubleVolume { get; set;} • Dostęp z JavaScript:varvolume = get('silverlightControlHost').Content .mediaPlayer.Volume;get('silverlightControlHost').Content .mediaPlayer.Volume = volume + 0.1;
Metody • Właściwość:[ScriptableMember]publicvoid Play(stringurl) {...} • Dostęp z JavaScript:get('silverlightControlHost').Content .mediaPlayer.Play("vid.wmv");
Zdarzenia • Zdarzenie:[ScriptableMember]publiceventEventHandlerMediaChanged;(tylko EventHandler i EventHandler<T>) • Podłączanie się:$get('silverlightControlHost').Content .mediaPlayer.MediaChanged = playerMediaChanged;$get('silverlightControlHost').Content.mediaPlayer.addEventListener('MediaChanged', playerMediaChanged);
ASP.NET Silverlight Web Services
ProblemIlość odtworzeń Chcę móc śledzić ilość odtworzeń filmów…
Współpraca • Po stronie serwera – usługa WCF • Po stronie klienta – proxy do usługi • Tylko wywołania asynchroniczne
Ograniczenia • Tylko basicHttpBinding • Odwołania tylko do domeny, z której pobraliśmy aplikację • Chyba że…
Silverlight JavaScript Odwoływanie się do JavaScriptu z poziomu Silverlight
ProblemIlość odtworzeń cd. Dostajemy aktualną ilość odtworzeń, ale jak ją wyświetlić na stronie?
HtmlPage • HtmlPage.BrowserInformationInformacje o przeglądarce • HtmlPage.DocumentDostęp do dokumenty HTML (DOM) • HtmlPage.WindowDostęp do okienka przeglądarki • HtmlPage.PluginElement, w którym osadzona jest kontrolka Silverlight. ScriptObject
ScriptObject • GetProperty • SetProperty • Invoke • InvokeSelf • ConvertTo<T>
HtmlPage.Document • GetElementById • QueryString • Submit • …
HtmlPage.Window • Alert, Confirm, Prompt • Navigate • …
Ciekawostka:Polling duplex Powiadomienia on-line z serwera
Tryb Pull Klient Serwer 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!
Tryb Push Klient Serwer Informuj mnie o nowych wiadomościach Bill: 640K ought to be enough for anybody Steve: Developers! Developers!… Close
Podsumowanie • Przekazywanie stanu przy GET i POST • Odwołania asynchroniczne • Współpraca po stronie klientaJavaScript Silverlight