SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
WebApp Slots and WebAPI versioning
Nicolò Carandini [MVP]
n.carandini@outlook.com
@TPCWare
Argomenti trattati
Oggi parliamo di:
- WebApp slots
- WebAPI versioning
Il contesto d’uso è:
- Azure
- ASP.NET Core
- Visual Studio 2017
…e se rimane tempo, altri scenari di versioning and update
WebApp Slots
In generale si usano almeno tre slots:
• Develop
• Staging
• Production
Ma nessuno vieta di usarne altri:
• Test
• Q&A
• …
Slot di uso comune
Development
• L’ambiente di sviluppo è quello in cui si pubblica una versione durante lo
sviluppo di una o più funzionalità
Staging
• Per convenzione è l’ambiente in cui si fanno gli ultimi controlli prima di andare
in produzione, quindi è un ambiente che ricrea il più fedelmente possibile le
condizioni d’uso dell’ambiente di produzione.
Production
• Questo ambiente è quello che usano gli utenti quindi qui deve arrivare solo
ciò che funziona, dopo aver passato tutti i test funzionali e di integrazione,
con tutti i requisiti di quality assurance.
WebApp Slots in Azure
Per usare gli slot in Azure, occorre utilizzare un piano Standard o Premium
Creazione degli slot
Dal portale Azure, selezionare la Web App e aggiungere gli slot:
Swapping
Dal portale Azure, selezionare gli slot di sorgente e destinazione:
Configurazione degli slot
Per utilizzare i diversi slot occorre definire:
• Le impostazioni di slot che vengono scambiate
• Le impostazioni di slot che non vengono scambiate
• I diversi profili di pubblicazione su Visual Studio e/o gli strumenti di CI/CD
Impostazioni che vengono scambiate tra slot
Vi sono impostazioni che devono essere scambiate durante uno swap, perché
sono proprie dell’applicazione che viene spostata da uno slot all’altro:
• Impostazioni generali, quali la versione del framework, 32/64 bit, i socket Web
• Impostazioni app configurate per adattarsi a uno slot
• Stringhe di connessione configurate per adattarsi a uno slot
• Mapping dei gestori
• Impostazioni di monitoraggio e diagnostica
• Contenuto WebJobs
Impostazioni che non vengono scambiate tra slot
Vi sono impostazioni che non devono essere modificate durante uno swap,
perché sono proprie di quello specifico slot:
• Endpoint di pubblicazione
• Nomi di dominio personalizzati
• Certificati e associazioni SSL
• Impostazioni di scalabilità
• Utilità di pianificazione WebJobs
• Stringhe di connessione specifiche di uno slot
Gestione della connessione al database
Database di sviluppo ≠ Database di produzione !!!
Quello di sviluppo conterrà dati di prova utili ai diversi test di integrazione e
sarà oggetto di modifiche sia strutturali che di contenuto.
Per quanto riguarda lo staging, il discorso si fa più complesso e andrà applicata
la strategia più adatta per il progetto in questione, come l’intera replica del
database di produzione oppure solo di un suo sottoinsieme significativo.
Configurazione delle impostazioni di slot
Selezionando il flag di slot setting, l’impostazione non viene scambiata tra slot:
Slot App Settings
Le impostazioni dell’app si riferiscono allo slot di default (production). Per
modificare le impostazioni degli altri slot, selezionare prima lo slot:
Scambio con anteprima (swap multifase)
Quando si usa l'opzione Scambio con anteprima vengono effettuate le seguenti
operazioni:
• Lo slot di destinazione non viene modificato.
• Vengono applicati gli elementi di configurazione dello slot di destinazione allo slot
di origine.
• Riavvio dei processi di lavoro nello slot di origine usando la nuova configurazione.
• Al completamento dello scambio: lo slot di origine viene spostato nello slot di
destinazione e lo slot di destinazione viene spostato nello slot di origine come in
uno scambio manuale.
• In caso di annullamento dello scambio: gli elementi di configurazione dello slot di
origine vengono riapplicati allo slot di origine.
Scambio automatico
Lo scambio automatico semplifica gli scenari nei quali si vuole distribuire
continuamente l'app senza avvio a freddo e senza tempi di inattività.
Quando uno slot di distribuzione viene configurato per lo scambio automatico
in produzione, ogni volta che si esegue il push dell'aggiornamento del codice in
tale slot, il servizio app eseguirà automaticamente lo scambio dell'app in
produzione dopo che è stato eseguito il warm up nello slot di origine.
Demo
WebApp slots in Azure
WebApp Slots in ASP.NET Core
• ASP.NET Core è già da qualche mese in RTM
• Visual Studio 2017 è in dirittura d’arrivo.
• Le novità sono tantissime e i vantaggi offerti da ASP.NET Core sono tali da
renderlo sicuramente preferibile a molti altri framework di sviluppo di
applicazioni Web e WebAPI, incluso NodeJS.
Per questo motivo è importante vedere cosa cambia nell’uso degli slot per
quanto riguarda le Web App realizzate in ASP.NET Core.
Lavorare in ambienti multipli con ASP.NET Core
• ASP.NET Core introduce un miglior supporto per la gestione e il controllo del
comportamento dell’applicazione nei diversi slot di sviluppo, staging e
produzione.
• Valori di ambiente vengono utilizzati per indicare l’ambiente in cui
l’applicazione sta girando, consentendo un’appropriata configurazione della
stessa.
Impostare l’ambiente
• Utilizzare una variabile di configurazione del progetto può essere molto
pericoloso, perché è facile dimenticare una impostazione utilizzata per lo
sviluppo che viene poi pubblicata insieme al progetto nell’ambiente di
produzione.
• Per questo motivo ASP.NET Core utilizza valori propri del contesto di
esecuzione:
• In locale, vengono usate le variabili d’ambiente del PC.
• Su Azure, vengono utilizzati gli App Settings.
• Per convenzione, il nome della variabile è ASPNETCORE_ENVIRONMENT.
• Se su Azure la variabile non è definita, il valore d’ambiente è Production.
Gestire l’impostazione di ambiente con VS 2017
Per quanto riguarda l’ambiente di sviluppo da Visual Studio è facile definire la
variabile ASPNETCORE_ENVIRONMENT (ed eventuali altre variabili) via GUI, i
cui valori verranno salvati nel file launchSettings.json
Gestire l’impostazione di ambiente senza VS 2017
Se non si utilizza Visual Studio, è sempre possibile impostare manualmente la
variabile da Windows, Unix e OSX:
Utilizzare la variabile d’ambiente a runtime
• ASP.NET Core offre un servizio IHostingEnvironment che può essere
iniettato nella logica di startup o nei controller.
• Ad esempio, nella classe startup.cs generata dal template di VS:
IHostingEnvironment
• Il servizio IHostingEnvironment un’astrazione di base per lavorare con i diversi
ambienti (locale o di pubblicazione)
• Tramite l’istanza di una classe che implementa l’interfaccia di tale servizio, è
possibile conoscere l’ambiente in cui sta girando l’applicazione.
• Se occorre sapere il nome, basta utilizzare la proprietà EnvironmentName.
• Altrimenti è preferibile utilizzare il metodo
IsEnvironment(string environmentName)
che ignora i caratteri in maiuscolo, sia nella variabile di ambiente sia nel
parametro passato al metodo.
Environment tag helper
Nelle View è possibile utilizzare sia la tecnica di service injection sia il tag helper
Environment:
Demo
ASP.NET Core WebApp Environments
WebAPI con ASP.NET Core
• Se prima esistevano due tipi di progetto diversi, uno per le Web App e l’altro
per le WebAPI, con funzionamento simile ma basato su librerie differenti, ora
con ASP.NET Core abbiamo tutto nello stesso progetto.
• La gestione del Routing viene fatta come prima, a livello di Controller:
WebAPI Netiquette
Poiché una WebAPI altro non è che un servizio RESTful che viene esposto
all’esterno per essere utilizzato da altri, è molto importante:
• Definire una strategia di versioning
• Documentare in moto puntuale l’API (Application Program Interface)
WebAPI Versioning
Poiché l’API esposta da un servizio è inevitabilmente soggetta a cambiamento
nel corso del tempo, una corretta strategia di versioning consente tali modifiche
senza "rompere" il funzionamento di altre applicazioni che utilizzano tale
servizio.
Un metodo molto semplice è quello di utilizzare nelle classi Controller una
dichiarazione di Route che contenga esplicitamente il numero di versione:
Documentazione dell’API
Un ottimo sistema di documentazione è Swagger, che consente di descrivere
l’API di un servizio REST con un linguaggio JSON-like.
Per i progetti ASP.NET Core è disponibile sotto forma di pacchetto NuGet la
libreria Swashbuckle.AspNetCore, che è in grado di produrre tale
documentazione in modo automatico a partire dal codice contenuto nelle varie
classi Controller.
Le informazioni d’uso si trovano su GitHub all’indirizzo:
https://github.com/domaindrivendev/Swashbuckle.AspNetCore
Demo
ASP.NET Core WebAPI Versioning
Question time
Thanks to our Sponsors
Feedback Form
Compilate il feedback form!!
Aiutateci a migliorare la qualità degli eventi!!!
Track A
http://svy.mk/2l9THNc
Track B
http://svy.mk/2leDPWR

Más contenido relacionado

Similar a Web app slots and WebAPI versioning

Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web AppsAndrea Dottor
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreAndrea Dottor
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Andrea Dottor
 
Azure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET FrameworkAzure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET FrameworkNicolò Carandini
 
Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Andrea Dottor
 
Il cielo è sempre più azure
Il cielo è sempre più azureIl cielo è sempre più azure
Il cielo è sempre più azureKlab
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)Giorgio Di Nardo
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Andrea Agnoletto
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Andrea Dottor
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012Crismer La Pignola
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiAndrea Dottor
 
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Meet Magento Italy
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaXPeppers
 
Webcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineWebcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineDavide Benvegnù
 
Progettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSProgettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSsparkfabrik
 
Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoAndrea Dottor
 
Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store appsDotNetCampus
 
Pomeriggio Entity Framework - WP7 e SQL Compact Edition
Pomeriggio Entity Framework - WP7 e SQL Compact EditionPomeriggio Entity Framework - WP7 e SQL Compact Edition
Pomeriggio Entity Framework - WP7 e SQL Compact EditionDomusDotNet
 

Similar a Web app slots and WebAPI versioning (20)

Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
 
Introduzione ad ASP.NET Core
Introduzione ad ASP.NET CoreIntroduzione ad ASP.NET Core
Introduzione ad ASP.NET Core
 
Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0Cosa c'è di nuovo in asp.net core 2 0
Cosa c'è di nuovo in asp.net core 2 0
 
Azure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET FrameworkAzure Mobile Services con il .NET Framework
Azure Mobile Services con il .NET Framework
 
Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5Crea servizi REST per la tua App con ASP.NET 5
Crea servizi REST per la tua App con ASP.NET 5
 
Il cielo è sempre più azure
Il cielo è sempre più azureIl cielo è sempre più azure
Il cielo è sempre più azure
 
ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)ASP.NET MVC: Andare oltre il 100% (Web@work)
ASP.NET MVC: Andare oltre il 100% (Web@work)
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
Back to the Future: Migrare da WebForm ad ASP.NET Core gradualmente
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
 
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
Marco Zani: Come dimensionare Magento per raggiungere i Key Performance Indic...
 
Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0Alessandro Forte - ASP.Net 4.0
Alessandro Forte - ASP.Net 4.0
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 
Webcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio OnlineWebcast - Introduzione a Visual Studio Online
Webcast - Introduzione a Visual Studio Online
 
Progettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWSProgettare e sviluppare soluzioni serverless con AWS
Progettare e sviluppare soluzioni serverless con AWS
 
Windows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppoWindows azure - abbattere tempi e costi di sviluppo
Windows azure - abbattere tempi e costi di sviluppo
 
Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store apps
 
Pomeriggio Entity Framework - WP7 e SQL Compact Edition
Pomeriggio Entity Framework - WP7 e SQL Compact EditionPomeriggio Entity Framework - WP7 e SQL Compact Edition
Pomeriggio Entity Framework - WP7 e SQL Compact Edition
 

Más de Nicolò Carandini

Wasm and Blazor CDays keynote
Wasm and Blazor CDays keynoteWasm and Blazor CDays keynote
Wasm and Blazor CDays keynoteNicolò Carandini
 
The absolute need of Secure Http
The absolute need of Secure HttpThe absolute need of Secure Http
The absolute need of Secure HttpNicolò Carandini
 
Christmas greetings cards with blazor
Christmas greetings cards with blazorChristmas greetings cards with blazor
Christmas greetings cards with blazorNicolò Carandini
 
Code review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live ShareCode review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live ShareNicolò Carandini
 
The Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure GalaxyThe Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure GalaxyNicolò Carandini
 
Web app slots and webapi versioning
Web app slots and webapi versioningWeb app slots and webapi versioning
Web app slots and webapi versioningNicolò Carandini
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinNicolò Carandini
 
Universal Apps localization and globalization
Universal Apps localization and globalizationUniversal Apps localization and globalization
Universal Apps localization and globalizationNicolò Carandini
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaNicolò Carandini
 

Más de Nicolò Carandini (20)

Wasm and Blazor CDays keynote
Wasm and Blazor CDays keynoteWasm and Blazor CDays keynote
Wasm and Blazor CDays keynote
 
The absolute need of Secure Http
The absolute need of Secure HttpThe absolute need of Secure Http
The absolute need of Secure Http
 
Christmas greetings cards with blazor
Christmas greetings cards with blazorChristmas greetings cards with blazor
Christmas greetings cards with blazor
 
Xamarin DevOps
Xamarin DevOpsXamarin DevOps
Xamarin DevOps
 
Code review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live ShareCode review e pair programming con Visual Studio Live Share
Code review e pair programming con Visual Studio Live Share
 
Azure dev ops meetup one
Azure dev ops meetup oneAzure dev ops meetup one
Azure dev ops meetup one
 
Spa with Blazor
Spa with BlazorSpa with Blazor
Spa with Blazor
 
The Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure GalaxyThe Hitchhiker's Guide to the Azure Galaxy
The Hitchhiker's Guide to the Azure Galaxy
 
Game matching with SignalR
Game matching with SignalRGame matching with SignalR
Game matching with SignalR
 
Swagger loves WebAPI
Swagger loves WebAPISwagger loves WebAPI
Swagger loves WebAPI
 
Xamarin Workbooks
Xamarin WorkbooksXamarin Workbooks
Xamarin Workbooks
 
Swagger per tutti
Swagger per tuttiSwagger per tutti
Swagger per tutti
 
Web app slots and webapi versioning
Web app slots and webapi versioningWeb app slots and webapi versioning
Web app slots and webapi versioning
 
Intro xamarin forms
Intro xamarin formsIntro xamarin forms
Intro xamarin forms
 
Swagger pertutti
Swagger pertuttiSwagger pertutti
Swagger pertutti
 
Windows 10 design
Windows 10 designWindows 10 design
Windows 10 design
 
Windows 10 IoT
Windows 10 IoTWindows 10 IoT
Windows 10 IoT
 
Mobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con XamarinMobile services multi-piattaforma con Xamarin
Mobile services multi-piattaforma con Xamarin
 
Universal Apps localization and globalization
Universal Apps localization and globalizationUniversal Apps localization and globalization
Universal Apps localization and globalization
 
Applicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e KatanaApplicazioni web con ASP.NET Owin e Katana
Applicazioni web con ASP.NET Owin e Katana
 

Web app slots and WebAPI versioning

  • 1.
  • 2. WebApp Slots and WebAPI versioning Nicolò Carandini [MVP] n.carandini@outlook.com @TPCWare
  • 3. Argomenti trattati Oggi parliamo di: - WebApp slots - WebAPI versioning Il contesto d’uso è: - Azure - ASP.NET Core - Visual Studio 2017 …e se rimane tempo, altri scenari di versioning and update
  • 4. WebApp Slots In generale si usano almeno tre slots: • Develop • Staging • Production Ma nessuno vieta di usarne altri: • Test • Q&A • …
  • 5. Slot di uso comune Development • L’ambiente di sviluppo è quello in cui si pubblica una versione durante lo sviluppo di una o più funzionalità Staging • Per convenzione è l’ambiente in cui si fanno gli ultimi controlli prima di andare in produzione, quindi è un ambiente che ricrea il più fedelmente possibile le condizioni d’uso dell’ambiente di produzione. Production • Questo ambiente è quello che usano gli utenti quindi qui deve arrivare solo ciò che funziona, dopo aver passato tutti i test funzionali e di integrazione, con tutti i requisiti di quality assurance.
  • 6. WebApp Slots in Azure Per usare gli slot in Azure, occorre utilizzare un piano Standard o Premium
  • 7. Creazione degli slot Dal portale Azure, selezionare la Web App e aggiungere gli slot:
  • 8. Swapping Dal portale Azure, selezionare gli slot di sorgente e destinazione:
  • 9. Configurazione degli slot Per utilizzare i diversi slot occorre definire: • Le impostazioni di slot che vengono scambiate • Le impostazioni di slot che non vengono scambiate • I diversi profili di pubblicazione su Visual Studio e/o gli strumenti di CI/CD
  • 10. Impostazioni che vengono scambiate tra slot Vi sono impostazioni che devono essere scambiate durante uno swap, perché sono proprie dell’applicazione che viene spostata da uno slot all’altro: • Impostazioni generali, quali la versione del framework, 32/64 bit, i socket Web • Impostazioni app configurate per adattarsi a uno slot • Stringhe di connessione configurate per adattarsi a uno slot • Mapping dei gestori • Impostazioni di monitoraggio e diagnostica • Contenuto WebJobs
  • 11. Impostazioni che non vengono scambiate tra slot Vi sono impostazioni che non devono essere modificate durante uno swap, perché sono proprie di quello specifico slot: • Endpoint di pubblicazione • Nomi di dominio personalizzati • Certificati e associazioni SSL • Impostazioni di scalabilità • Utilità di pianificazione WebJobs • Stringhe di connessione specifiche di uno slot
  • 12. Gestione della connessione al database Database di sviluppo ≠ Database di produzione !!! Quello di sviluppo conterrà dati di prova utili ai diversi test di integrazione e sarà oggetto di modifiche sia strutturali che di contenuto. Per quanto riguarda lo staging, il discorso si fa più complesso e andrà applicata la strategia più adatta per il progetto in questione, come l’intera replica del database di produzione oppure solo di un suo sottoinsieme significativo.
  • 13. Configurazione delle impostazioni di slot Selezionando il flag di slot setting, l’impostazione non viene scambiata tra slot:
  • 14. Slot App Settings Le impostazioni dell’app si riferiscono allo slot di default (production). Per modificare le impostazioni degli altri slot, selezionare prima lo slot:
  • 15. Scambio con anteprima (swap multifase) Quando si usa l'opzione Scambio con anteprima vengono effettuate le seguenti operazioni: • Lo slot di destinazione non viene modificato. • Vengono applicati gli elementi di configurazione dello slot di destinazione allo slot di origine. • Riavvio dei processi di lavoro nello slot di origine usando la nuova configurazione. • Al completamento dello scambio: lo slot di origine viene spostato nello slot di destinazione e lo slot di destinazione viene spostato nello slot di origine come in uno scambio manuale. • In caso di annullamento dello scambio: gli elementi di configurazione dello slot di origine vengono riapplicati allo slot di origine.
  • 16. Scambio automatico Lo scambio automatico semplifica gli scenari nei quali si vuole distribuire continuamente l'app senza avvio a freddo e senza tempi di inattività. Quando uno slot di distribuzione viene configurato per lo scambio automatico in produzione, ogni volta che si esegue il push dell'aggiornamento del codice in tale slot, il servizio app eseguirà automaticamente lo scambio dell'app in produzione dopo che è stato eseguito il warm up nello slot di origine.
  • 18. WebApp Slots in ASP.NET Core • ASP.NET Core è già da qualche mese in RTM • Visual Studio 2017 è in dirittura d’arrivo. • Le novità sono tantissime e i vantaggi offerti da ASP.NET Core sono tali da renderlo sicuramente preferibile a molti altri framework di sviluppo di applicazioni Web e WebAPI, incluso NodeJS. Per questo motivo è importante vedere cosa cambia nell’uso degli slot per quanto riguarda le Web App realizzate in ASP.NET Core.
  • 19. Lavorare in ambienti multipli con ASP.NET Core • ASP.NET Core introduce un miglior supporto per la gestione e il controllo del comportamento dell’applicazione nei diversi slot di sviluppo, staging e produzione. • Valori di ambiente vengono utilizzati per indicare l’ambiente in cui l’applicazione sta girando, consentendo un’appropriata configurazione della stessa.
  • 20. Impostare l’ambiente • Utilizzare una variabile di configurazione del progetto può essere molto pericoloso, perché è facile dimenticare una impostazione utilizzata per lo sviluppo che viene poi pubblicata insieme al progetto nell’ambiente di produzione. • Per questo motivo ASP.NET Core utilizza valori propri del contesto di esecuzione: • In locale, vengono usate le variabili d’ambiente del PC. • Su Azure, vengono utilizzati gli App Settings. • Per convenzione, il nome della variabile è ASPNETCORE_ENVIRONMENT. • Se su Azure la variabile non è definita, il valore d’ambiente è Production.
  • 21. Gestire l’impostazione di ambiente con VS 2017 Per quanto riguarda l’ambiente di sviluppo da Visual Studio è facile definire la variabile ASPNETCORE_ENVIRONMENT (ed eventuali altre variabili) via GUI, i cui valori verranno salvati nel file launchSettings.json
  • 22. Gestire l’impostazione di ambiente senza VS 2017 Se non si utilizza Visual Studio, è sempre possibile impostare manualmente la variabile da Windows, Unix e OSX:
  • 23. Utilizzare la variabile d’ambiente a runtime • ASP.NET Core offre un servizio IHostingEnvironment che può essere iniettato nella logica di startup o nei controller. • Ad esempio, nella classe startup.cs generata dal template di VS:
  • 24. IHostingEnvironment • Il servizio IHostingEnvironment un’astrazione di base per lavorare con i diversi ambienti (locale o di pubblicazione) • Tramite l’istanza di una classe che implementa l’interfaccia di tale servizio, è possibile conoscere l’ambiente in cui sta girando l’applicazione. • Se occorre sapere il nome, basta utilizzare la proprietà EnvironmentName. • Altrimenti è preferibile utilizzare il metodo IsEnvironment(string environmentName) che ignora i caratteri in maiuscolo, sia nella variabile di ambiente sia nel parametro passato al metodo.
  • 25. Environment tag helper Nelle View è possibile utilizzare sia la tecnica di service injection sia il tag helper Environment:
  • 26. Demo ASP.NET Core WebApp Environments
  • 27. WebAPI con ASP.NET Core • Se prima esistevano due tipi di progetto diversi, uno per le Web App e l’altro per le WebAPI, con funzionamento simile ma basato su librerie differenti, ora con ASP.NET Core abbiamo tutto nello stesso progetto. • La gestione del Routing viene fatta come prima, a livello di Controller:
  • 28. WebAPI Netiquette Poiché una WebAPI altro non è che un servizio RESTful che viene esposto all’esterno per essere utilizzato da altri, è molto importante: • Definire una strategia di versioning • Documentare in moto puntuale l’API (Application Program Interface)
  • 29. WebAPI Versioning Poiché l’API esposta da un servizio è inevitabilmente soggetta a cambiamento nel corso del tempo, una corretta strategia di versioning consente tali modifiche senza "rompere" il funzionamento di altre applicazioni che utilizzano tale servizio. Un metodo molto semplice è quello di utilizzare nelle classi Controller una dichiarazione di Route che contenga esplicitamente il numero di versione:
  • 30. Documentazione dell’API Un ottimo sistema di documentazione è Swagger, che consente di descrivere l’API di un servizio REST con un linguaggio JSON-like. Per i progetti ASP.NET Core è disponibile sotto forma di pacchetto NuGet la libreria Swashbuckle.AspNetCore, che è in grado di produrre tale documentazione in modo automatico a partire dal codice contenuto nelle varie classi Controller. Le informazioni d’uso si trovano su GitHub all’indirizzo: https://github.com/domaindrivendev/Swashbuckle.AspNetCore
  • 33. Thanks to our Sponsors
  • 34. Feedback Form Compilate il feedback form!! Aiutateci a migliorare la qualità degli eventi!!! Track A http://svy.mk/2l9THNc Track B http://svy.mk/2leDPWR