Sesja z konferencji Microsoft Technology Summit 2013 na temat nowości, które pojawiły się w ASP.NET 4.5.1 oraz Visual Studio 2013 dla web deweloperów. Poruszane zagadnienia to m.in.: zmiany w IDE / Web Essentials, Web Forms, ASP.NET MVC 5, OWIN, SignalR, Web API 2
1. ASP.NET, jakiego (jeszcze) nie
znacie - co nowego dla web
developerów?
Bartłomiej Zass
Senior Technical Evangelist | Microsoft
2. Cel sesji
Zobaczysz co wydarzyło się przez ostatni rok w ASP.NET i
narzędziach
Dowiesz się co nowego dla web deweloperów w Visual Studio 2013
Zrozumiesz czym jest OWIN i Katana
Poznasz podstawy ASP.NET Web API 2 oraz SignalR
7. ASP.NET 4.5 (VS 2012)
Wspólne
Biblioteki przez NuGet
Optymalizacja transferu
Walidacja żądań
HTML 5 Web Sockets
30% szybszy start
30% mniej pamięci
MVC
HTML 5
Mobile
Async controller
8. ASP.NET 4.5 (c.d.)
Web Forms
HTML 5
Szablony projektów
Request Validation
Silnie typowane kontrolki
Model Binders
Data Annotations
Unobtrusive JS validation
Web API v1
Framework do usług HTTP
9. Otwarty kod
aspnetwebstack.codeplex.com
ASP.NET MVC, ASP.NET Web API, ASP.NET Web Pages
entityframework.codeplex.com
Entity Framework
github.com/SignalR/SignalR
ASP.NET SignalR
10. Visual Studio 2012 (web)
Ogólne
Round tripping
Page inspector
Standardy
Wsparcie dla HTML 5
Całkowicie nowy edytor CSS
Całkowicie nowy edytor
JavaScript
Edytor Web Forms
Pełne wsparcie dla kontrolek
serwerowych w edytorze .ASPX
Publikowanie
Publikowanie na Azure/TFS
Database Migrations
11. ASP.NET & Web Tools Update 2012.2
Web Forms
Friendly URLs (/page/5 zamiast
page.aspx?id=5)
Strony mobilne
(page.Mobile.aspx)
MVC
Single Page Applications template
Facebook App template
Web API
Odata
Tracing
Help Page
SignalR v1
Visual Studio
LESS
Podświetlanie składni:
CoffeeScript, KnockoutJS,
Mustache, Handlebars, JSRender
Mobile Emulator extensibility
Selective Publishing, local/remote
diff
Page inspector dla elementów
dynamicznych
12. ASP.NET & Web Tools 2013
One ASP.NET
Nowy interfejs zakładania projektu
Dodawanie dowolnego frameworku do
dowolnego projektu
Scaffolding dla wszystkich typów projektów
Konfiguracja uwierzytelnienia
Ogólne
ASP.NET Identity
Szablony z Bootstrap.js
Azure
Server Explorer: Web Sites, Mobile Services,
VM’s, filtrowanie
MVC 5
Attribute Routing
Authentication filters, filter overrides
(wyłączanie per akcja)
Web API v2
CORS
Attribute Routing
Pełniejsze wsparcie dla OData
OAUTH
SignalR
OWIN, PCL, Xamarin
Entity Framework
Async, Stored procs, connection resilency
Visual Studio
Nowy edytor HTML
Live Browser Refresh
AngularJS intellisense
R.I.P. Cassini, FrontPage Extensions
17. ASP.NET – trochę historii
Pierwsza wersja w 2002 r. z .NET 1.0
Zoptymalizowany dla deweloperów klasycznego ASP oraz biznesowych
aplikacji desktopowych
Monolityczna struktura (System.Web)
Zaprojektowany do działania na IIS
Część .NET – rzadkie release’y
Rozwijany wraz z rosnącymi wymaganiami
Wszystkie funkcje domyślnie włączone (trzeba ręcznie wyłączać)
Jedyna opcja hostowania - IIS
18. Rozwiązania
Odłączenie od cyklu produkcji .NET Framework
ASP.NET MVC
Częstsze release’y
Usuwanie zależności z System.Web
Np. ASP.NET Web API
Możliwość self-hostingu
Co z hostingiem?
19. Self-host
ASP.NET Web API umożliwił self-hosting aplikacji
Inne frameworki tworzyły lub miały własne serwery…
Nowoczesne aplikacje wymagają łączenia wielu frameworków na
jednym serwerze
Potrzebny standardowy interfejs komunikacji między hostem i
aplikacjami!
20. „Katana”
Zestaw komponentów do budowania i uruchamiania aplikacji na
otwartym interfejsie / abstrakcji hostingu
Func<IDictionary<string, object>, Task>;
http://owin.org/
34. ASP.NET Web API 2
Skalowalna platforma usług HTTP dla stron internetowych, urządzeń,
telefonów, tabletów, …
Dystrybucja przez NuGet
Instalowane wraz z Visual Studio 2013
Supportowane na .NET 4.5+
Kod - http://aspnetwebstack.codeplex.com
36. Nowości w ASP.NET Web API 2
Attribute Routing
Integracja z OWIN
Prostsze unit testy (IHttpActionResult)
Klient Web API wspierany przez Portable Class Library
ODATA: $select, $expand, $batch
Request batching
Web API security (CORS, OAUTH 2.0)
37. Attribute routing
Definiowanie
tras bliżej
zasobów
config.Routes.MapHttpRoute(
name: “TodosForTodoList",
routeTemplate: "api/todolists/{id}/todos",
defaults: new { controller = “todolists”, action = “GetTodos” }
);
public IEnumerable<TodoItem> GetTodos() { … }
38. Attribute routing
Definiowanie
tras bliżej
zasobów
config.MapHttpAttributeRoutes();
[HttpGet("api/todolists/{id}/todos")]
public IEnumerable<TodoItem> GetTodos(int id) { … }
39. Attribute routing
Opcjonalne
parametry
Domyślne
parametry
Constraints
[HttpGet(“Demographics/{zipcode?}")]
public Demographics Get(int? zipcode) { … }
[HttpGet("Demographics/{zipcode=98052}")]
public Demographics Get(int zipcode) { … }
[HttpGet("people/{id:int}")]
public Person Get(int id) { … }
[HttpGet("people/{name:alpha}")]
public Person Get(string name) { … }
41. Unit testing
Miejscami było trudniejsze niż mogło być (np. post)…
Teraz sprowadza się do:
Utworzenie kontrolera
Ustawienie właściwości (Request, Configuration, itp.)
Wywołanie akcji
IHttpActionResult
Wywoływane zaraz po zwróceniu wartości – reszta widzi zwrócony obiekt
43. Integracja z OWIN
OWIN – Open Web Interface for .NET (http://owin.org)
Wspólny interfejs komunikacji między aplikacjami webowymi a serwerem
Inspirowany przez node.js, Rack, WSGI
Middleware pipeline
Zintegrowany z ASP.NET
np. uwierzytelniane użytkownika
ASP.NET zgodne z OWIN – działa na dowolnym hoście OWIN
45. ASP.NET Web API OData
Komponenty do implementacji usług Odata
Model builders, formatery (Atom/JSON/XML), parsery, generator wyrażeń
LINQ, itp.
Bazuje na ODataLib
Te same podstawy co WCF Data Services
Pierwsza wersja – VS 2012 Update 2
top, skip, orderby, filter
Wsparcie dla $select, $expand, $batch, $value
47. Żądania cross-origin
Przeglądarki nie pozwalają na wysyłanie żądań
do innych domen
Origin = scheme + host + port
CORS = Cross-Origin Resource Sharing
W3C Candidate Recommendation
Implementowane przez wszystkie nowe przeglądarki
Wspierane przez Web API 2
EnableCorsAttribute
49. Zabezpieczanie usług Web API
Użytkownicy mogą nie ufać aplikacji klienckiej proszącej o hasło
Aplikacje i serwery hostujące nie chcą przechowywać danych
logowania
Dostęp powinien być podzielony na zakresy, z możliwością
odwołania
Wsparcie dla wielu typów klientów i przeglądarek
Zabezpieczenie przed CSRF
50. Oauth 2.0
Framework kontrolujący dostęp do określonych chronionych
zasobów użytkownika
Standard IETF (RFC 6749, 6750)
Zaprojektowany do pracy z usługami HTTP
56. OAuth 2.0 – wsparcie dla Bearer token
Autoryzacja przez OAuth 2.0 Bearer tokens
Walidacja i konwersja tokenu na claims
Client
Protected
Resource
57. ASP.NET Web Api 2 i Bearer token
public class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
// Włącz wsparcie dla OAuth 2.0 bearer tokens
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
}
58. Oauth 2.0 – serwer autoryzacyjny
Własny serwer
Prosty serwer w szablonie Web API 2
W przyszłości – wsparcie przez OWIN middleware
Skorzystaj z istniejącego
Windows Azure Active Directory
Active Directory Federation Services w Windows Server 2012 R2
61. SignalR
Prosty sposób na realizację komunikacji real-time po HTTP
Instalowane przez NuGet, oficjalne wsparcie (wersja 2.0)
Wydajność
Skalowalność
62. Przykładowe scenariusze
Każdy scenariusz, w którym korzystamy z pollingu lub konieczne jest
odświeżanie strony
Monitorowanie, dashboardy
Współpraca z innymi
Postęp pracy
Formularze wypełniane w czasie rzeczywistym przez kilka osób
Gry
67. Wydajność i skalowanie
Przepustowość
Bardzo wysoka wydajnośc
Setki tysięcy komunikatów na sekundę
Bardzo niskie zapotrzebowanie na pamięć
Skalowanie
W pełni asynchroniczny
Tysiące połączen per serwer
Skalowanie przez message bus (Azure Service Bus, Redis, SQL)
69. Signalr 2 – co nowego?
OWIN – brak zależności z System.Web!
Portable .NET Client Library
.NET 4.5, Silverlight 5, WinRT, Windows Phone 8
CORS
Wsparcie dla iOS i Android (MonoTouch, MonoDroid)
Komunikaty dla pojedynczego użytkownika
Zachowane wsparcie dla starszych klientów
70. Podsumowanie
„One ASP.NET” – MVC, Web Forms (i inne) razem
Browser Link
OWIN
Luźne wiązanie komponentów
Wymienność
Szybciej i elastyczniej
Nowości w świecie usług ASP.NET
Web API 2
SignalR 2