Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
Molte applicazione sono (ancora) sviluppate in WebForm e non possono essere convertite automaticamente ad ASP.NET Core. Una riscrittura completa in molti casi è impossibile o impensabile da attuare. In questa sessione vedremo come migrare in modo graduale queste tipologie di applicazioni verso ASP.NET Core, andando in dettaglio nelle varie problematiche che solitamente si possono presentare. La sessione deriva da un'esperienza reale, che ha permesso di conoscere (nel bene o nel male) le difficoltà che si nascondo in queste migrazioni.
Evento: https://www.xedotnet.org/eventi/one-day-enterprise-application/
ASP.NET Core 2.0 è stato ufficialmente rilasciato e porta con se parecchie novità come le Razor Pages, template aggiornati e l'integrazione con Application Insights migliorata. In questa cercheremo capiremo la vera maturità di questo framework, e quanto questo rilascio sia importante per noi dev.
In questa sessione vedremo come uno sviluppatore WebForm possa essere velocemente produttivo (utilizzando le ultime versioni di ASP.NET Core) grazie a Blazor. Vedremo quindi cosa differenza un'applicazione ASP.NET Core, rispetto a quelle WebForm (.NET Framework) fino ad arrivare a comprendere perchè e come Blazor possa agevolare questa transizione.
Quindi una sessione non solo per chi è nuovo a Blazor, ma anche perchì ancora non ha migrato ad ASP.NET Core.
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaMarco Breveglieri
Slide del seminario sull'uso di React con Delphi e confronto con altre tecnologie (es. ExtJS) per lo sviluppo Web, tenuto al Delphi Day 2016 a Piacenza.
I sorgenti sono disponibili qui:
https://github.com/marcobreveglieri/conferences/tree/master/2016/delphi_day_2016
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
Molte applicazione sono (ancora) sviluppate in WebForm e non possono essere convertite automaticamente ad ASP.NET Core. Una riscrittura completa in molti casi è impossibile o impensabile da attuare. In questa sessione vedremo come migrare in modo graduale queste tipologie di applicazioni verso ASP.NET Core, andando in dettaglio nelle varie problematiche che solitamente si possono presentare. La sessione deriva da un'esperienza reale, che ha permesso di conoscere (nel bene o nel male) le difficoltà che si nascondo in queste migrazioni.
Evento: https://www.xedotnet.org/eventi/one-day-enterprise-application/
ASP.NET Core 2.0 è stato ufficialmente rilasciato e porta con se parecchie novità come le Razor Pages, template aggiornati e l'integrazione con Application Insights migliorata. In questa cercheremo capiremo la vera maturità di questo framework, e quanto questo rilascio sia importante per noi dev.
In questa sessione vedremo come uno sviluppatore WebForm possa essere velocemente produttivo (utilizzando le ultime versioni di ASP.NET Core) grazie a Blazor. Vedremo quindi cosa differenza un'applicazione ASP.NET Core, rispetto a quelle WebForm (.NET Framework) fino ad arrivare a comprendere perchè e come Blazor possa agevolare questa transizione.
Quindi una sessione non solo per chi è nuovo a Blazor, ma anche perchì ancora non ha migrato ad ASP.NET Core.
Sviluppo Web con React e Delphi - Seminario Delphi Day 2016, PiacenzaMarco Breveglieri
Slide del seminario sull'uso di React con Delphi e confronto con altre tecnologie (es. ExtJS) per lo sviluppo Web, tenuto al Delphi Day 2016 a Piacenza.
I sorgenti sono disponibili qui:
https://github.com/marcobreveglieri/conferences/tree/master/2016/delphi_day_2016
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
Slide e codice lo potete trovare a questo link:
http://blog.dottor.net/post/2012/09/18/Codice-e-slide-della-sessione-Whats-New-in-ASPNET-45-and-Visual-Studio-2012.aspx
Il Microsoft .NET Framework è in continua evoluzione, e con la prossima versione verranno rilasciate interessanti funzionalità riguardanti ASP.NET.All'interno di questa sessione conosceremo tutte queste novità, ed andremo invece più in dettaglio in alcune di esse, permettendo a chi conosce già ASP.NET di poter essere più produttivo (Strongly Typed Data Controls, Model Binding, Asynchronous, WebSocket, ... ), mentre, per chi invece non ha molta esperienza con questa tecnologia, potrà vedere come i nuovi template di progetto e Visual Studio 2012 potranno aiutarlo ad approcciare correttamente queste tipologie di applicazioni.
ASP.NET MVC è una piattaforma aperta costruita come un puzzle di componenti. Per personalizzare il comportamento dei componenti interni del sistema è quindi sufficiente rimuovere uno dei tasselli e sostituirlo con uno scritto da noi. Un'operazione resa semplice ed immediata dall'interfaccia Dependency Resolver.
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webAndrea Dottor
Una sessione alla scoperta delle grandi novità che ASP.NET 5 introduce. Questo nuovo aggiornamento del framework non porta solo un'evoluzione alla tecnologia che già conosciamo, ma porta importanti e radicali cambiamenti (una "rivoluzione" di molte cose che già conosciamo e utilizziamo) che dobbiamo essere pronti a sfruttare il prima possibile per dare una marcia in più alle nostre applicazioni. ASP.NET MVC 6, nuovo template di progetto, cross-platform.
In this meeting we will face a very known but often overlooked aspect, namely the use of HTTPS. Many developers still think that the use of HTTPS is reserved for important sites and that for simpler things, such as a site consisting of a few static pages, it's not worth it. We will first try to dispel this myth, showing how much damage can be done using the HTTP pages of a simple static site, and then we will show how it is possible to use the free SSL certificates of Let's Encrypt to create HTTPS services without spending a fortune.
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
Slide e codice lo potete trovare a questo link:
http://blog.dottor.net/post/2012/09/18/Codice-e-slide-della-sessione-Whats-New-in-ASPNET-45-and-Visual-Studio-2012.aspx
Il Microsoft .NET Framework è in continua evoluzione, e con la prossima versione verranno rilasciate interessanti funzionalità riguardanti ASP.NET.All'interno di questa sessione conosceremo tutte queste novità, ed andremo invece più in dettaglio in alcune di esse, permettendo a chi conosce già ASP.NET di poter essere più produttivo (Strongly Typed Data Controls, Model Binding, Asynchronous, WebSocket, ... ), mentre, per chi invece non ha molta esperienza con questa tecnologia, potrà vedere come i nuovi template di progetto e Visual Studio 2012 potranno aiutarlo ad approcciare correttamente queste tipologie di applicazioni.
ASP.NET MVC è una piattaforma aperta costruita come un puzzle di componenti. Per personalizzare il comportamento dei componenti interni del sistema è quindi sufficiente rimuovere uno dei tasselli e sostituirlo con uno scritto da noi. Un'operazione resa semplice ed immediata dall'interfaccia Dependency Resolver.
ASP.NET 4.6 e ASP.NET 5...l'evoluzione del webAndrea Dottor
Una sessione alla scoperta delle grandi novità che ASP.NET 5 introduce. Questo nuovo aggiornamento del framework non porta solo un'evoluzione alla tecnologia che già conosciamo, ma porta importanti e radicali cambiamenti (una "rivoluzione" di molte cose che già conosciamo e utilizziamo) che dobbiamo essere pronti a sfruttare il prima possibile per dare una marcia in più alle nostre applicazioni. ASP.NET MVC 6, nuovo template di progetto, cross-platform.
In this meeting we will face a very known but often overlooked aspect, namely the use of HTTPS. Many developers still think that the use of HTTPS is reserved for important sites and that for simpler things, such as a site consisting of a few static pages, it's not worth it. We will first try to dispel this myth, showing how much damage can be done using the HTTP pages of a simple static site, and then we will show how it is possible to use the free SSL certificates of Let's Encrypt to create HTTPS services without spending a fortune.
Introduction to Blazor and WebAssembly in Christmas sauce. In this session we will see how to create a small demonstration application to send Christmas greetings.
2. Checklist
⃣ Web & Tools evolution
⃣ OWIN: Open Web Interface for .NET
⃣ Katana : Microsoft Owin
⃣ Moduli e Pipeline
⃣ Self-Host in un’app Console
⃣ Self-Host su Azure Work role
⃣ Costruire un modulo custom
3. Web & Tools evolution
2002 2013
569 milioni 2,4 miliardi
46 minuti al giorno
3 milioni
4 ore al giorno
555 milioni
Static File Serving
Dynamic Page
Generation
Web API
Real-Time
Push Notifications
...
Modern Web App
4. Tool: Evoluzione del modello di rilascio
• ASP.NET incluso nel .NET Framework
– Almeno un anno tra un rilascio e l’altro
• ASP.NET MVC e WebAPI stand-alone
– Rilasci intra-annuali
• "One ASP.NET" modulare
– Rilasci frequenti e indipendenti dei singoli moduli
tramite NuGet
6. Hosting: IIS web server
Reliability
Scalable Web
Infrastructure
Dynamic Caching and
Compression
Rich Diagnostic Tools
Choice
ASP.NET and PHP
Support
Modular and
Extensible Web Server
Integrated Media
Platform
Security
Enhanced Server
Protection
Secure Content
Publishing
Access Protection
Control
Centralized
Web Farm
Management
Delegated Remote
Management
Powerful
Admin Tools
7. Web Hosting: IIS pro/versus
• Pro
– È un sistema integrato, potente ed affidabile
– È "da sempre" modulare (HttpModules, HttpHandlers)
• Contro
– È monolitico (prendi tutto o niente)
– Unifica le funzioni di Host e di Server
– I moduli non sono facilmente testabili
– I moduli devono essere riscritti se li si vuol far "girare"
in un altro Host
8. Verso una nuova architettura
Host
Server
Application
Middleware
Framework
9. Con un nuovo standard
OWIN: Open Web Interface for .NET
• Cos’è:
Una specifica che descrive un’interfaccia standard
tra .NET web servers e .NET applications
• A cosa serve:
Disaccoppiando le diverse parti che compongono il
server e l’applicazione, consente di scrivere moduli
facilmente testabili che possono girare senza
modifiche su Host di diverso tipo.
10. OWIN: environment dictionary
Key Name Value Description
"owin.RequestBody" A Stream with the request body, if any. Stream.Null MAY be used
as a placeholder if there is no request body.
"owin.RequestHeaders" An IDictionary<string, string[]> of request headers.
"owin.RequestMethod" A string containing the HTTP request method of the request (e.g.,
"GET", "POST").
"owin.RequestPath" A string containing the request path. The path MUST be relative to
the "root" of the application delegate.
"owin.RequestPathBase" A string containing the portion of the request path corresponding
to the "root" of the application delegate.
"owin.RequestProtocol" A string containing the protocol name and version (e.g. "HTTP/1.0"
or "HTTP/1.1").
"owin.RequestQueryString" A string containing the query string component of the HTTP
request URI, without the leading “?” (e.g., "foo=bar&baz=quux").
The value may be an empty string.
"owin.RequestScheme" A string containing the URI scheme used for the request (e.g.,
"http", "https").
• IDictionary<string, object>
12. OWIN: Host loader
All’avvio, l’Host si incarica di mettere insieme
tutte le parti:
• Crea l‘environment dictionary
• Istanzia il Server
• Chiama il codice di setup dell’applicazione
ottenendo come risultato l’application delegate
• Consegna al Server l’application delegate che è
l’application entry point
13. OWIN: request execution
Per ogni richiesta HTTP:
• Il server chiama l’applicazione tramite
l’application delegate fornendo come
argomento il dizionario contenente i
dati della richiesta e della risposta.
• L’applicazione popola la risposta o
restituisce un errore.
14. Hosting: IIS Vs. OWIN
Internet Information Server
Classic / Integrated
CGI
Compression
Request Tracing
Authentication
OWIN Based Host
All avvio viene
costruita la
pipeline con i soli
componenti
necessari
15. Microsoft Owin (aka Katana)
• Microsoft OWIN è formato dall’insieme dei
componenti OWIN che pur essendo open
source, sono costruiti e rilasciati da Microsoft.
• L’insieme comprende sia componenti
infrastrutturali, come Host e Server, sia
componenti funzionali, come i moduli di
autenticazione e di binding a framework quali
SignalR e ASP.NET Web API.
16. OWIN: Host
• Ci sono diverse implementazioni:
Custom Host: Microsoft.Owin.SelfHost
IIS/ASP.NET: Microsoft.Owin.Host.SystemWeb
19. OWIN Middleware Component
Tutti i packages Microsoft.Owin.Security.* che fanno
parte del nuovo Identity System di Visual Studio 2013
(i.e. Cookies, Microsoft Account, Google, Facebook,
Twitter, Bearer Token, OAuth, Authorization server, JWT,
Windows Azure Active directory, and Active directory
federation services) sono realizzati come “OWIN
Middleware Component” e possono essere usati in
entrambi gli scenari self-hosted e IIS-hosted.
21. Moduli e pipeline: IAppBuilder
public interface IAppBuilder
{
IDictionary<string, object> Properties { get; }
object Build(Type returnType);
IAppBuilder New();
IAppBuilder Use(object middleware, params object[] args);
}
public static class AppBuilderUseExtensions
{
public static IAppBuilder Use<T>(this IAppBuilder app, params object[] args)
public static void Run(this IAppBuilder app, Func<IOwinContext, Task> handler)
public static IAppBuilder Use(this IAppBuilder app,
Func<IOwinContext, Func<Task>, Task> handler)
}
22. Moduli e pipeline: AppBuilder
namespace Microsoft.Owin.Builder
{
using AppFunc = Func<IDictionary<string, object>, Task>;
/// <summary>
/// A standard implementation of IAppBuilder
/// </summary>
public class AppBuilder : IAppBuilder
{
private static readonly AppFunc NotFound = new NotFound().Invoke;
private readonly IList<Tuple<Type, Delegate, object[]>> _middleware;
private readonly IDictionary<Tuple<Type, Type>, Delegate> _conversions;
private readonly IDictionary<string, object> _properties;
23. Creazione della pipeline
Il Loader:
• Crea una istanza di AppBuilder
• Identifica la classe di startup
• Chiama il metodo Configuration(IAppBuilder app)
• Crea una lista ordinata dei componenti con gli
associati parametri di creazione
• Istanzia i componenti passando a ciascuno il
componente successivo e i parametri di creazione.
24. Funzionamento della pipeline
La chiamata al primo componente produce
l’esecuzione di tutti i componenti della pipeline:
Middleware
Middleware
Middleware
Empty Middleware
25. Microsoft Owin: application
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Run(context =>
{
context.Response.ContentType = "text/plain";
return context.Response.WriteAsync("Hello, world.");
});
}
}
26. Costruire un modulo custom
public class LoggerMiddleware : OwinMiddleware
{
private readonly ILog _logger;
public LoggerMiddleware(OwinMiddleware next, ILog logger)
: base(next)
{
_logger = logger;
}
public override async Task Invoke(IOwinContext context)
{
_logger.LogInfo("Middleware begin");
await this.Next.Invoke(context);
_logger.LogInfo("Middleware end");
}
}
27. Utilizzare un modulo custom
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
appBuilder.Use<LoggerMiddleware>(new EasyLogger());
...
}
}