Skip to main content
ASP.NET, jakiego (jeszcze) nie
znacie - co nowego dla web
developerów?
Bartłomiej Zass
Senior Technical Evangelist | Microsoft
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
Plan prezentacji






Najważniejsze nowości od Visual Studio 2012
Co nowego w Visual Studio 2013?
OWIN i Katana
ASP.NET Web API v2
SignalR
ASP.NET i Web Tools
Release co ok. 6 miesięcy

Wrzesień
2012

ASP.NET
4.5
VS2012

Luty
2013

ASP.NET
& Web
Tools
2012.2

Jesień
2013

VS2013
Web Tools „Labs”
 Release co ok. 2 tygodnie
 Od lipca otwarty kod
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
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
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
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
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
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
Demo
One ASP.NET
Nowości w narzędziach
OWIN i Katana
Hello, Node.js
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type':'text/plain'});
res.end('Hello Worldn');
}).listen(1337, '127.0.0.1');
Node.js po pewnym czasie…
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
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?
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!
„Katana”
 Zestaw komponentów do budowania i uruchamiania aplikacji na
otwartym interfejsie / abstrakcji hostingu

Func<IDictionary<string, object>, Task>;

http://owin.org/
Komponenty „Katana”
Application

Udostępnij model
programistyczny przez
OWIN pipeline

Application Framework
Przetwarzaj żądania przez
OWIN pipeline

Server
Uruchom aplikację OWIN
na serwerze

Host
Komponenty „Katana” (2)
Application

Application Framework

Server

Host

• SignalR
• ASP.NET Web API
• SystemWeb
• HttpListener

• IIS
• OwinHost.exe
• Custom Process
Ekostystem OWIN
Application

Application Framework

Server

Host

•
•
•
•
•
•
•
•
•

SignalR
ASP.NET Web API
NancyFx
Fubu MVC
Service Stack
OpenRasta
Simple.Web
Gate
Custom Framework

• SystemWeb
• HttpListener
• Custom Server

• IIS
• OwinHost.exe
• Custom Process
Demo
Katana – Hello, World!
Katana 2.0: middleware do
uwierzytelniania








Microsoft.Owin.Security.Cookies
Microsoft.Owin.Security.Facebook
Microsoft.Owin.Security.Google
Microsoft.Owin.Security.MicrosoftAccount
Microsoft.Owin.Security.OAuth
Microsoft.Owin.Security.Twitter
Microsoft.Owin.Security.WindowsAzure
Konfiguracja middleware
app.UseOAuthBearerAuthentication(new
OAuthBearerAuthenticationOptions());
app.UseExternalSignInCookie();
app.UseMicrosoftAccountAuthentication("Client Id",
"Client Secrect");
app.UseTwitterAuthentication("Consumer Key", "Consumer Secret");
app.UseFacebookAuthentication("App ID", "App Secret");

app.UseGoogleAuthentication();
Demo
Middleware uwierzytelniający w ASP.NET MVC
Wymiana komponentów
Your Application

Web API + SignalR + static files
SystemWeb
IIS
Windows (local or remote)
Elastyczność Host/Server
Your Application

Web API + SignalR + static files
HttpListener
SystemWeb

OwinHost.exe
IIS
Windows (local or remote)
Do chmury!
Your Application

Web API + SignalR + static files
WebListener

OwinHost.exe
Windows Azure Worker Role
Windows (local or remote)
Demo
Self-hosting Katana (OwinHost)
Mono??
ASP.NET Web API
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
Demo
ASP.NET Web Api - podstawy
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)
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() { … }
Attribute routing
 Definiowanie
tras bliżej
zasobów

config.MapHttpAttributeRoutes();

[HttpGet("api/todolists/{id}/todos")]
public IEnumerable<TodoItem> GetTodos(int id) { … }
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) { … }
Demo
Attribute routing
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
Demo
Testowanie z IHttpActionResult
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
Demo
Własny host OWIN z ASP.NET Web API
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
Demo
ASP.NET Web API Odata v2
Żą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
Demo
ASP.NET Web API i CORS
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
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
OAuth 2.0
Żądanie dostępu

Przyznanie dostępu
Przyznanie uprawnień

Access Token
Access Token
Chroniony zasób
OAuth 2.0 – przyznanie dostępu
Authorization Server
user

2
User

Browser

<Client ID>

Authorization
Endpoint

Token
Endpoint

CODE 302 3

<Client ID>
302
1

Client

Protected Resource
OAuth 2.0 – token request
Authorization Server
Authorization
Endpoint

client

<Client ID>

CODE

Client

1

Token
Endpoint

2
refresh token
access token

Protected Resource
OAuth 2.0 – resource request
authorization server
Authorization
Endpoint

1

Token
Endpoint

Authorization: Bearer

refresh token

2
access token

Client

Protected Resource
OAuth 2.0 – odświeżenie access tokenu
Authorization Server
Authorization
Endpoint

Token
Endpoint

client

2

<Client ID>

refresh token

1

access token

refresh token

Client

Protected Resource
OAuth 2.0 – wsparcie dla Bearer token
 Autoryzacja przez OAuth 2.0 Bearer tokens
 Walidacja i konwersja tokenu na claims

Client

Protected
Resource
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());
}
}
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
Demo
Zabezpieczanie dostępu do usług ASP.NET Web API
SignalR
SignalR





Prosty sposób na realizację komunikacji real-time po HTTP
Instalowane przez NuGet, oficjalne wsparcie (wersja 2.0)
Wydajność
Skalowalność
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
Demo
Podstawy SignalR
SignalR i przeglądarki
 SignalR działa zawsze!





Najpierw próba z WebSockets
Fallback do Server Sent Events
Forever Frame
Long Polling
Klienci SignalR
 Obecnie









JavaScript (jQuery)
.NET 4.0 / 4.5
Silverlight 5
Windows Store apps
Windows Phone 8
Portable Class Library
MonoTouch
MonoDroid

 W przyszłości







C++
„Goły” JavaScript (bez jQuery)
iOS natywnie
Java
.NET Micro Framework
…
Demo
SignalR i WPF
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)
Skalowanie
backplane

web nodes

clients
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
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
© 2013 Microsoft Corporation. Wszelkie prawa zastrzeżone.
Microsoft, Windows oraz inne nazwy produktów są lub mogą być znakami towarowymi lub zastrzeżonymi znakami towarowymi firmy Microsoft w Stanach Zjednoczonych i innych krajach. Zamieszczone informacje mają
charakter wyłącznie informacyjny. FIRMA MICROSOFT NIE UDZIELA ŻADNYCH GWARANCJI (WYRAŻONYCH WPROST LUB DOMYŚLNIE), W TYM TAKŻE USTAWOWEJ RĘKOJMI ZA WADY FIZYCZNE I PRAWNE, CO DO
INFORMACJI ZAWARTYCH W TEJ PREZENTACJI.