Azure paa s v2 – microservices, microsoft (azure) service fabric, .apps and o...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of business)
1.
2. WinRT w Windows 8 i tzw.
aplikacje LOB (300)
Tomasz Kopacz
Architect Evangelist | Microsoft
3. Cel sesji
Jak pisać aplikacje „biznesowe” dla Windows 8
Przegląd scenariuszy przydatnych przy ich implementacji
4. Cechy aplikacji biznesowych (LOB)
Przechowują wrażliwe dane (też prywatność)
Komunikują się z zapleczem (BEZPIECZNIE!)
Zwykle „danych” jest bardzo dużo
Czasami są wielomodułowe
Zwykle mają historię z brodą: C++, MFC, …
Zwykle zawierają jakieś ważne algorytmy – publiczny sklep?
NIGDY
Wygląd… mniej istotny (TO SIĘ ZMIENIA!!!)
5. „Problem” świata dzisiejszego
Ruch BYOD, praca z domu, praca na
komputerze żony/męża/dziecka
Czyli co?
Policy korporacyjne na komputerze
domowym?
Domownik: WRRR
Brak policy w ogóle:
Administrator: WRRR
Szukamy złotego środka…
6.
7. Przypomnienie – subiektywnie wybrane
cechy appsów WinRT
Izolacja (Sandbox) owszem, ale kontrakty do współdzielenia
Nowoczesny UI + touch + sensory + nowe urządzenia +…
Zapewnienie Fast & Fluid – async / await
Broker kontrolujący dostęp do wrażliwych API / danych
Powiadamianie
Sensory
(Bogata grafika (DX 11.1) )
Aplikacja ma kontrolę nad całym ekranem
8. Plan prezentacji
Jak działa Windows 8 pod spodem?
Jak budować komponenty?
Scenariusze
Kryptografia i bezpieczeństwo
Logowanie
W8 jak klient Web Services - ASMX / WCF / REST
Praca z duża ilością danych
Wielomodułowa aplikacja + Wymiana danych
Powiadamianie
„Własny sklep”
9.
10. Języki w których można pisać na W8
Założenie: programista używa tej wiedzy, którą już posiada
HTML + JavaScript, GOTOWE układy stron
XAML + C# / VB.NET – też do migracji rozwiązań z Windows
Phone
C++ - gry, specjalistyczne algorytmy, GOTOWE fragmenty kodu
Ale Windows 8 pozwala ŁĄCZYĆ te technologie
UI w HTML
Logika w C#
Obliczenia w C++ (choć – w JavaScript będą też szybkie )
12. .NET WinRT Interop
RCW = Runtime Callable Wrapper
Zwiększa reference counting obiektu ABI
Implementuje finalizator który zmniejsza reference
counting
Marshal.ReleaseComObject = Dispose
CCW = ABI Callable Wrapper
Odwołanie do obiektu zarządzanego jako do COM
Kosztowne? NIE!
Ale – można też pracować z typami WinRT!
void SetVal(int index, int value); - AUĆ
void SetValRange(int start,int length,int[]
values);
Albo – przyjąć jako parametr IBuffer i go
wypełnić
13. Typy .NET a WinRT
Tylko klasy „sealed” (oprócz kontrolek XAML)
Stąd – interfejsy popularne! List<string> vs IList<string> |
IVector<T>
Sygnatury API muszą wykorzystywać typy WinRT
Część typów ma sposoby na konwersję – np. extension methods
Typy generyczne – NIE; Virtual – NIE
Struktury mogą mieć tylko publiczne pola
Uwaga! Mówimy o przekazywaniu, nie implementacji
Uwaga na tablice i kolekcje
Nietypowe przekazywanie przez referencję / readonly
14. 01 Demo – 3 2
„ciekawostki”
API z „Async”
Z tablicy do strumieni w JS
(2 style pracy z plikami – pominąć – w materiałach)
15. (Demo na slajdach)
Klient C# - bez problemu (ale on może też „natywnie” –
bez żadnych pośredników
Klient JS – promises (.then, .done, funkcja progres);
jedyne ograniczenie – nie da się
bezpośrednio CancellationToken przekazać. Ale da się
async anulować (.Cancel )
17. Pojemniki DI/IoCUnity, Autofact
Problem: dużo komponentów, związki przez „dodaj
referencję”…
Dependency Injection, Inversion of Control
Rozwiązania:
Unity (P& P) – DI + przechwytywanie typów + instancjonowanie
Autofac – jeden z pierwszych pojemników DI / IoC (2007)
MEF – lekkie narzędzie do kompozycji, rozszerzenia, dynamiczne
odkrywanie dzięki atrybutom
Generalnie –uwagi: Jutro, 12:00-13:00 systemów obowiązkowe
Sesja warta dla większych
Bartłomiej Zass: Tworzenie aplikacji dla Windows Phone i Windows 8 –
dwie pieczenie przy jednym ogniu (w skrócie – MVVM/PCL/strategie);
20. Co to obiekt ABI?
Bazuje na koncepcjach COM
Binarny standard komponentu
Referencja do obiektu WinRT (czyli ABI) to
wskaźnik do wskaźnika do vtable która zawiera
tablicę wskaźników do funkcji interfejsów.
Pierwsze dwa to:
IUnknown
IInspectable
21. Czyli:
Każdy obiekt WinRT implementuje IUnknown
AddRef / Release / QueryInterface
(+ WeakReference do unikania zapętleń cyklicznych)
Każdy obiekt WinRT implementuje IInspectable
GetIids – lista ID interfejsów
GetRuntimeClassName – nazwa (z przestrzenią nazw), na
przykład
Windows.Foundation.Collections.IVector`1<IMap’2<…>>
GetTrustLevel (Base / Partial / Full)
IActivationFactory (jak stworzyć obiekt)
23. Mamy fragment w C++ - co dalej
C++/CX, Windows Runtime WRL, Windows Runtime C++
Component Template Library
Mapują wzorce C++ (konstruktor...) Niezależne od kompilatora (znane
na interfejsy COM template); pełna kontrola nad
Mapuje pomiędzy wyjątkami a wydajnością (zwłaszcza Marshaling
wartościami HRESULT jak się odbywa + cykl życia).
Odwzorowuje wyjściowe parametry i HRESULT, IDL itp
zwracane wartości Cel podstawowy: Łatwa migracja ATL
Zapewnia automatyczną obsługę / inne -> WRL
zliczania referencji dla wskaźników "C:Program Files (x86)Windows
do obiektów Windows Runtime Kits8.0IncludeWinRTwrl"
Odczyt i zapis metadanych
24. A ja mam binarny komponent…
NIE DZIAŁA! Binarnie się nie da – trzeba mieć kod…
Dlaczego? Bo WinRT: Wymaga by komponenty były
„ACTIVABLE”
To znaczy (uproszczenie!) – by można było wywołać domyślny
konstruktor
Ale obiekt ABI może być używany jako obiekt COM
(domyślnie jest tak deklarowany; można to wyłączyć)
Opcja: zewnętrzne hostowanie + komunikacja typu RPC –
będzie dalej
27. Migracja C++?
Lektura tu
Pakujemy w WRL; Czasami wygodniej – skonwertować do
C++/WX
Uwaga! Da się wołać dowolne Win32 API
Ale – nie przejdzie to certyfikacji!
29. To też działa w drugą stronę…
Aplikacja „desktop” może wołać WinRT
How to: Add or Remove References By Using the
Reference anager
Po zmianie .csproj, normalnie – wywołujemy metody
Błędy – sprawdzić czy jest dodane
WindowsRutnime, InteropServices
Uruchomienie Modern UI Apps (patrz rejestr):
IApplicationActivationManager::ActivateApplication
start knownfolder:{1e87508d-89c2-42f0-8a7e-
32. Uwierzytelnianie i bezpieczeństwo
Zintegrowane Certyffikacja dla Wieloczynnikowe Federacja - ADFS Single Sign On z
Uwierzytelnianie uwierzytelnianie appsa - My i uwierzytelnianie Live, Facebook, it
Windows Root p..
Izolowane Mechanizm Wsparcie Crypto APIs Podpisywanie
Bezpieczeństwo pojemniki „zdolności” SSL/TLS aplikacji
Appsów
33. Bezpieczeństwo – co może W8
Kryptografia
Klucze symetryczne / asymetryczne
Dziedziczenie kluczy na podstawie hasła
Kody HMAC (message authentication)
Podpisywanie treści
DPAPI – (DataProtection) – statyczne / strumienie danych
Kodowanie
PKI
Tworzenie certyfikatów, też self-signed, importowanie PFX, SmartCard
Certyfikaty z „My”
Zablokowanie dziedziczenia zaufania z systemu
Per aplikacja – root certificates / trusted certificates
Kryteria: Hardware-based, wynikające z łańcucha, automatyczny wybór
36. Trzy rozwiązania (technologie)
Serwer:
Tradycyjne usługi Web – WCF
Usługi w stylu REST
Pisane w WCF | Pisane w ASP.NET MVC Web Api <- prościej
OData – formalny sposób dostępu do baz relacyjnych | Azure Mobile Services
WebSocket – MessageWebSocket i StreamWebSocket (callback)
Klient
WCF – „Add Service Reference”
REST – tak proste że „add” nie jest potrzebne
WebSocket
JavaScript – bardzo naturalne
C# - praca ze strumieniami | NetHttpBinding
40. Drobiazgi
Brak pliku konfiguracyjnego XML
Kod do Reference.cs
ConfigureEndpoint
E… to może wszystko ręcznie? < PROŚCIEJ!
Tylko async (Task)
Internet & Private Network & Enterprise Authentication
TransportWithMessageCredential – bezpieczne przekazanie
hasła
[…]Security.Mode = […].BasicHttpSecurityMode.TransportCredentialOnly
[…]. ClientCredentialType = […].HttpClientCredentialType.Windows;
41. REST services
WebClient HttpClient
Działa z async
Implementacja w System.Net
HttpClient definuje
Get(Async)
Zwraca HttpResponseMessage
Put(Async)
Post(Async)
Delete(Async)
RESTful!
Wreszcie
42. Analiza odpowiedzi…
XML: LinqToXML, XmlReader/XmlWriter, XmlSerializer
JSON:
Zbudować JsonObject i przekazać zwrócony łańcuch
Metoda Parse()
Rzuca wyjątek gdy łańcuch błędny
Można: GetNamedString(), GetNamedNumber()
Indexer – działa, ale WOLNO = nie używać
Z WCF: DataContractJsonSerializer
NuGet: JSON.NET
43. Windows Store app for banking: code walkthrough
(Windows Store apps using JavaScript and HTML)
A może certyfikaty?
1. Logowanie do aplikacji hasłem jednorazowy
2. Serwis wołany z danym hasłem jednorazowym
CreateRequestAsync
3. Serwis generuje plik PFX
4. Serwis przekazuje plik do klienta
5. Klient (Modern UI) importuje plik do Appsa
ImportPfxDataAsync
InstallCertificateAsync
6. No i reszta komunikacji przy użyciu wzajemnego uwierzytelnienia i certyfikatów
Muszą się zgadzać
Certyfikaty | URL-e serwisów | (normalne wymagania PKI)
Zamiast 2-5 certyfikaty mogą być generowane w infrastrukturze firmowej
46. A serwer na tym samym komputerze?
Loopback zablokowany na maszynach niedeveloperskich
CheckNetIsolation LoopbackExempt -a -n=0e3d3bc9-242c-4a2f-b4ba-
67f401039f2f_xhszanydfyfm8
Nie przejdzie certyfikacji przez sklep aplikacja zależna od innego
serwisu na tej samej maszynie
Ale – jak ten serwis będzie też w Internecie..
Idea: konto demo, itp.
Sideloading – OK
Modern UI Apps może być tylko KLIENTEM
Ale – mamy WebSocket, DuplexContract itp..
48. Identyfikacja „klienta”
Użytkownika:
Login / password (własne)
Live ID (z Live Connect)
Facebook, Google ID itp.
Dostajemy to o co prosimy (np. – tylko unikalny AID; dla naszego appsa)
Urządzenie: ASHWID i GetPackageSpecificToken
49. Składniki ASHWID
4 bajty na blok (2 – komponent, 2 – wartość)
Nie ma korelacji pomiędzy aplikacjami (ASHWID per apps)
Nie planowane do reklam! Kod Komponent
1,0 Processor
Niezmienne, gdy: 2,0 Memory
Reinstalacja OS 3,0 Disk Device
4,0 Network Adapter
Reset urządzenia 5,0 Audio Adapter
Aktualizacja OS SKU 6,0 Docking Station
7,0 Mobile Broadband
Aktualizacja wersji aplikacji 8,0 Bluetooth
Zmiana użytkownika na urządzeniu 9,0 System BIOS
50.
51. Tablet 1Ghz / 768 MB + obliczenia – hmm
Rozwiązanie:
1. Klient woła usługę
2. Usługa liczy
3. Usługa wysyła przez Push Notification że obliczenia zostały
zakończone
4. Klient
1. Albo subskrybuje się (Background Task) na Raw Notification
1. Apps musi działać by odebrać, na pierwszym planie
2. Albo – dostaje pięknie wyglądającego Toast-a i „klika”
55. Podstawy podstaw: JavaScript
WinJS.Binding.optimizeBindingReferences = true;
var person = { name: "Fran" };
<div>Welcome, <span id="nameSpan" data-win-bind="innerText:
name"></span>
var personDiv = document.getElementById("nameSpan");
WinJS.Binding.processAll(personDiv, person);
56. Ładowanie z opóźnieniem | wirtualizacja
danych
ISupportIncrementalLoading
HasMoreItems
Windows.Foundation.IAsyncOperation<LoadMoreItemsResult>
LoadMoreItemsAsync
Nie zapomieć o:
NavigationCacheMode = NavigationCacheMode.Enabled;
OnNavigatedTo(NavigationEventArgs e){ if (this._pageKey != null &&
e.NavigationMode == NavigationMode.Back) return; }
Inaczej – losowe problemy (głównie z współbieżnością i pamięcią)
58. Dane lokalne
ObservableCollection
Potem - forma cache
LinqToXML | LinqToObject
SQLite - zaleta – mamy bazę relacyjną, rozumiejącą SELECT
Potem – zapis z cache do zewnętrznego pojemnika
Koncepje „stare”, jeszcze z DataSet
Współbieżność, kontrola kiedy coś zostało zapisane, konflikty.
Nie zapomnieć o Suspend!
61. Wyzwanie - komunikacja i „detekcja”
zmian
Kontrakty Share
Share – tak, ale tylko z „moimi” aplikacjami
Potwierdzanie „odebrania” pakietu
Strumień dużego obiektu
File Open Picker
Kwerendy na plikach (a’la WinFS)
(Wspomniane już usługi)
66. Różne
Get-AppxPackage | Where-Object {$_.InstallLocation -
NotMatch "C:Program FilesWindowsApps" } | Where-
Object {$_.InstallLocation -NotMatch "C:Windows" }|
Remove-AppxPackage -Package {$_.PackageFullName}
W taki sam sposób
Inwentaryzacja
Sprawdzenie wersji / aktualizacji itp.
MSI może zainstalować APPX!
67. Certyfikat do podpisania takiej aplikacji
Serwer certyfikatów (tryb Standalone – wygodniej zmieniać
SN)
Code Signing Certificate Template
Żądanie – krytyczne – Subject!
Konwersja (certreq -New AppxCodeSign.inf
CodeSignReq.req)
Wkleić żądanie w portal (poczekać na akceptację)
Pobrać certyfikat i zaimportować go do Visual Studio
Dodać CA do Root dla MASZYNY (nie usera!)
69. Podsumowanie 0
Budowa modułowa – tak jak zwykle
Komponenty WinRT i ABI pomiędzy językami
ClassLibrary jeśli nie opuszczamy .NET
Autofact.dll, inne DI, Unity – w zależności od potrzeb – takie same
narzędzia jak w normalnym .NET
Niesamowite możliwości łączenia języków = ŁATWIEJ i
SZYBCIEJ
(Dygresja – VB a C# w roku 2002 a HTML i C# w roku 2012)
70. Podsumowanie I – „Dlaczego”
Dlaczego aplikacje „biznesowe” w Modern UI i Windows 8
No bo… taki jest świat
Za chwilę nie będzie gdzie uruchamiać aplikacji Windows Forms
A chwilę później – WPF, SL
Web – nie zawsze pasuje!
Inne style używania aplikacji
Inne style biura / użytkownika / pracy
Biznesowe a Sklep – też się DA
Demo Web Services, w konfiguracji wskazywane „firmowe” itp.
71. Podsumowanie II - Technicznie
Dlaczego aplikacje „biznesowe” w Modern UI i Windows 8
Sandbox (izolacja)
ZERO problemów ze zgodnością (no bo jak …); utrzymanie….
Niedoceniane: PC Refresh (zostawia appsy i pliki i sprząta z pozostałości!)
Instalacja = kopiowanie, nie ma zewnętrznych zależności
Bezpieczeństwo!
Certyfikacja
Windows Store – Microsoft sprawdza czy działa
Użytkownik zarządza, dokonuje płatności itp
Sideloading – można sprawdzić wewnątrz firmy + np. WACK
Firma zarządza | „Lekka” kontrola prywatnych urządzeń
Fast & Connect & Offline & …
Jak zawsze: bezproblemowa współpraca z posiadaną
infrastrukturą
72. Wypełnij ankietę i wygraj nagrody!
Organizatorzy MTS czytają Wystarczy 5 minut Twojego
wszystkie ankiety. czasu na wypełnienie ankiety!
Dzięki nim masz realny wpływ na Masz szansę wygrać m.in.
konferencję oraz merytorykę i wejściówkę na MTS 2013 (25x)
prelegentów kolejnego MTS. oraz inne nagrody.
Gdzie i jak?
Ankiety dostępne są online – na stronie konferencji (konferencjamts.pl)
Można je wypełnić od dziś, aż do 11 listopada 2012
73. Strefa Ekspertów (ATE)
Strefa ATE dostępna jest w strefie Partnerów
Zapraszamy wszystkich zainteresowanych poszerzeniem
wiedzy
Eksperci będą do Państwa dyspozycji
Ja będę tam:
(za chwilę – przy okazji imprezy)
20121030 11:40 – 12:30 (jak skończę sesję o Azure + kilka minut)
74. Polskie aplikacje na Windows 8
http://www.microsoft.com/poland/windows8/polskie-aplikacje/
SLAJD OBOWIĄZKOWY (proszę nie usuwać)Jest to slajd archiwizacyjny, więc prezentację na sali na MTS rozpoczynamy od slajdu 2 – tytułowego.
Podczas tej sesji omówione będzie Windows, 8, z punktu widzenia developera, który głównie chce zbudować tzw. aplikacje „Line of Business”. Przeanalizowane zostanie także, w jaki sposób WinRT zapewnia współpracę pomiędzy komponentami napisanymi w różnych technologiach oraz mechanizmy w Windows 8, które pozwalają łatwiej migrować starsze fragmenty kodu. Uwaga! Część z tych informacji będzie nieprzydatna dla aplikacji, które mają być opublikowane w Store – zakładana jest instalacja typu „side-loading” (czyli generalnie wdrażanie aplikacji w ramach przedsiębiorstwa).
SLAJD DOMYŚLNIE UKRYTYMożna w nim podać namiary kontaktowe na prelegenta (nie jest to obowiązkowe).Mają one pozwolić (po pobraniu prezentacji) skontaktować się z prelegentem.Można również pokazać ten slajd na prezentacji.
SLAJD OBOWIĄZKOWY (proszę nie usuwać, i wypełnić zgodnie z instrukcją powyżej)PROSZĘ POKAZAĆ GO NA SESJI!
Przechowują wrażliwe dane (też prywatność)Zagrożenia: Kradzież, Tablet zostawiony w toalecieKomunikują się z zapleczem (bezpiecznie!)Ale – sieć hotelowa, kafejka, sieć domowaZwykle „danych” jest bardzo dużoSpadek po myśleniu w ramach architektury 2 warstwowejCzasami są wielomodułoweZwykle mają historię z brodąVB6, C++, MFC, …Zwykle zawierają jakieś ważne algorytmy – publiczny sklep? NIGDYWygląd…
Z drugiej strony, mamy
Jakoś tak wyszło że zadowoleni pracownicy lepiej pracują
Aplikacja w .NET ma klasyczny GCGen 0 – obiekty do 85000 bajtów, Gen 1Gen 2 – odśmieca także Large Object HeapWinRT – referencecounting + Weak Reference by uniknąć cyklicznych zapętleńWindows 8 jako OS: Usprawnienia w pamięciWspółdzielone strony pamięciPo modyfikacji są kopiowane jako prywatne dla procesuGłównie Memory-MappedFiles (czyli DLL-ki)Podział na często i rzadko zmienianie struktury danych
Binarny standard komponentówKlasy i Co-Clases mają ID (GUID) (i ew. nazwy)Class – coś co definiuje interfejs (GUID); kontrakt; czego się może spodziewać wywołującyCoclass – konkretna implementacja (np. danego algorytmu szufrowania). Jedna class wiele coclass dla danej implementacjiRejestr HKEY_CLASSES_ROOT\\CLSID – gdzie DLL„Nowoczesne” – też bez rejestruMetadane w TLBInstancjonowanie in-proc,out-proc, remote (DCOM)DllGetClassFactory -> IClassFactory -> CreateInstanceCzas życia:AddRef / Release; licznik referencjiSTA / MTA (apartment)Dane przekazywane pomiędzy apartamentami/wątkami są KONWERTOWANE (kopiowane, marshaled)
SLAJD OBOWIĄZKOWY (proszę nie usuwać i nie zmieniać)PROSZĘ POKAZAĆ GO NA SESJI!
SLAJD OBOWIĄZKOWY (proszę nie usuwać, można dopisać godziny swojego „dyżuru” w strefie ATE – lub usunąć tą część o swojej obecności)PROSZĘ POKAZAĆ GO NA SESJI!
Tu wpisujemy AGENDĘ
SLAJD OBOWIĄZKOWY (proszę nie usuwać i nie zmieniać)