Edição 2018
#mvpconf
Giovanni Bassi
Visual Studio/C#
Novidades do .NET Core 2.1 ASP.NET Core 2.1
#mvpconf
Patrocínio:
#mvpconf
Beneficiários do Evento:
APAE-Associação de Pais e Amigos dos
Excepcionais
Lar da Criança Ninho de Paz
Para quem quiser doar outros valores além das inscrições:
CAIXA ECONÔMICA FEDERAL
AG: 0504
CC: 01823-0
CNPJ: 89.078.059/0001-06
ITAU UNIBANCO AS
Agência: 467
CC: 611109
CNPJ 53.372.454/0001-50
#mvpconf
Giovanni Bassi
Categorias de premiação:
Visual Studio/C#
Primeiro ano premiado:
2009
Número de prêmios MVPs:
9
/GBassi
/giggio.tech
/giggiobassi
@giovannibassi
Biografia
Programador, Microsoft MVP, Não gerente
blog.lambda3.com.br, podcast.lambda3.com.br, dotnetarchitects.net, nodebr, dockersp
Escalador e ciclista
blog.lambda3.com.br
podcast.lambda3.com.br
#mvpconf
Victor Cavalcante
Categorias de premiação:
Visual Studio/C#
Primeiro ano premiado:
2009
Número de prêmios MVPs:
9
/vcavalcante.tech
@vcavalcante
Biografia
Programador, Microsoft MVP, Não gerente
blog.lambda3.com.br, podcast.lambda3.com.br, dotnetarchitects.net
blog.lambda3.com.br
podcast.lambda3.com.br
podcast.lambda3.com.br
0 – Eventos
1 – Docker
2 – .NET Core RC2
3 – Git
4 – Estudo
5 – Open Source
6 – Xamarin
7 – Node.js
8 – Democracia organizacional
9 – O programador poliglota
...
Toda semana em:
Acreditamos que a diversidade, em
suas diversas expressões, deve ser
respeitada e valorizada, e que uma
sociedade mais diversa é uma
sociedade melhor.
diversidade.tech
vagas.lambda3.com.br
ASP.NET
• Using ASP.NET Core previews in Azure App Service
• Introducing HttpClientFactory
• Improvements for using HTTPS
• Improvements for building Web APIs
• Introducing compatibility version in MVC
• Getting started with SignalR
• Introducing global tools
• Using Razor UI in class libraries
• Improvements for GDPR
• Improvements to the Kestrel HTTP server
• Improvements to IIS hosting
• Functional testing of MVC applications
• Introducing Identity UI as a library
• Hosting non-server apps with GenericHostBuilder
Usando os previews no Azure
• Deploy auto contido
• Contêineres
• Extensão do site preview 1
Novo HttpClientFactory
• Auxilia no uso correto do HttpClient
• Tempo de vida do HttpClient, uso correto de portas de saída, etc
• HttpClient lógicos
• Novo “middleware de saída” com o uso de delegating handlers
• Uso do Polly
• Retry, circuit breaker, etc
Melhorias pra https
• Problemas de não usar https:
• Piora SEO
• Marca o site como inseguro
• GDPR
• Piora o uso do navegador (acesso a geolocalização, movimento, notificações,
cache, getUserMedia, e todas as novas funcionalidades)
• Https em dev (certificado auto assinado, middleware)
• Redirecionamento para https
• Suporte a HSTS
• Habitando https via configuração
Melhorias na construção de APIs Web
• Resposta automática com status 400 em caso de erro de validação
• Inferência inteligente dos parâmetros de ações
• Attribute routing obrigatório
• Retorno de ActionResult<T>
• Melhoria no uso de Swagger/OpenAPI spec
• Melhor processamento das entradas
• Melhores erros em caso de problemas na validação
• Problem details (RFC 7808)
• Suporte à operação “test” com Http Patch e Json
Compatibilidade para MVC
• Forma de evoluir sem quebrar todo mundo
em versão minor
• Correção de problemas históricos e melhorias
significativa com risco baixo
• Evolução controlada:
• Marca item/comportamento como obsoleto
• Evolui comportamento via configuração
• Remove comportamento na próxima major
• No template:
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
xkcd.com/1172/
SignalR de volta!
• Reescrito mas familiar
• Lições aprendidas
• Sem necessidade de pacotes de Nuget adicionais
• Frontend no pacote npm @aspnet/signalr
• Independência do jQuery
Razor via bibliotecas
• Permite utilizar Razor via libs
• É possível sobrescrever views, parciais ou não e templates
• Identity como biblioteca
Suporte ao GDPR
• Lei da UE que começa a valer esse ano e toca privacidade
• Https
• Consentimento de cookies
• Cookie essencial
• Controle de download de dados
Melhorias no servidor Kestrel
• Saindo do libuv
• Melhorias de sockets e Span<T>
• Mais desempenho e consistência entre plataformas
Melhorias na hospedagem via IIS
• Request handler via Nuget
• Aplicação in-process, ganho de 440% de desempenho
• Troca pra out-of-process é configuração
• Debug direto do w3wp
Testes funcionais de aplicações MVC
• Já era possível desde a versão 1.0
• Pacote Microsoft.AspNetCore.Mvc.Testing
• Auxilia em problemas comuns de testes funcionais com ASP.NET Core
• Arquivo .deps
• Raiz do projeto
• Cria WebApplicationTestFixture<TStartup>
Demo
.NET
• Global tools
• Melhoria no tempo de build
• Minor-Version Roll-forward
• Desempenho de Sockets
• HTTP handler gerenciado
• Span<T>, Memory<T> e seus amigos
• Windows Compatibility Pack
• Mais plataformas
• Novidades com Docker
http://bit.ly/novidadesnet21
Global Tools
• dotnet install tool -g <ferramenta>
• Semelhante às ferramentas globais do npm
• Exemplos:
• github.com/lambda3/dotnetps
• github.com/lambda3/dx
• Multiplataforma
• Referências:
• bit.ly/net21globaltools
• bit.ly/criandoglobaltools
Melhoria no tempo de build
Minor-Version Roll-forward
• Uso automático de versão superior do runtime
• Somente em caso de ausência da versão especificada
• Somente minor ou patch, nunca major
• Pode-se optar por não fazer
• Exemplo: 2.1.0 => 2.1.1 (ou 2.2.0)
Desempenho de Sockets
• Troca de socket nativo pra código gerenciado .NET
• Uso de Span<T> e Memory<T>
• Melhorias de desempenho
Http handler gerenciado
• Utilizando a nova implementação de sockets
• Mais desempenho
• Sem dependência do ies libcurl (Linux) e WinHTTP (Windows)
• Comportamento consistente entre plataformas
Span<T>, Memory<T> e seus amigos
• Mais eficiência no uso da memória
• Projeção de arrays
• Mais informações na palestra de C# amanhã
Windows Compatibility Pack
• Facilita portar aplicações para o .NET Core
• Algumas dependências são somente pro Windows
• Caminho:
• Porte com o WCP (somente Windows)
• Troque as dependências exclusiva de Windows
• Remova o WCP
• nuget.org/packages/Microsoft.Windows.Compatibility
Mais plataformas
• Windows Client: 7, 8.1, 10 (1607+)
• Windows Server: 2008 R2 SP1+
• macOS: 10.12+
• RHEL: 7+
• Fedora: 26+
• openSUSE: 42.3+
• Debian: 8+
• Ubuntu: 14.04, 16.04, 17.10+
• SLES: 12+
• Alpine: 3.6+
Novidades com Docker
• Imagens menores
• Imagens mais seguras (menos superfície de ataque)
• Imagens:
• Alpine SDK e runtime
• Ubuntu 18.04
• Runtime com
#mvpconf
Encerramento:
• Considerações Finais
• Perguntas e Respostas
• Agradecimentos
w w w. l a m b d a 3 . c o m . b r
Obrigado!
Giovanni Bassi
Victor Cavalcante

Novidades do .NET Core 2.1 e do ASP.NET Core 2.1

  • 1.
    Edição 2018 #mvpconf Giovanni Bassi VisualStudio/C# Novidades do .NET Core 2.1 ASP.NET Core 2.1
  • 2.
  • 3.
    #mvpconf Beneficiários do Evento: APAE-Associaçãode Pais e Amigos dos Excepcionais Lar da Criança Ninho de Paz Para quem quiser doar outros valores além das inscrições: CAIXA ECONÔMICA FEDERAL AG: 0504 CC: 01823-0 CNPJ: 89.078.059/0001-06 ITAU UNIBANCO AS Agência: 467 CC: 611109 CNPJ 53.372.454/0001-50
  • 4.
    #mvpconf Giovanni Bassi Categorias depremiação: Visual Studio/C# Primeiro ano premiado: 2009 Número de prêmios MVPs: 9 /GBassi /giggio.tech /giggiobassi @giovannibassi Biografia Programador, Microsoft MVP, Não gerente blog.lambda3.com.br, podcast.lambda3.com.br, dotnetarchitects.net, nodebr, dockersp Escalador e ciclista blog.lambda3.com.br podcast.lambda3.com.br
  • 5.
    #mvpconf Victor Cavalcante Categorias depremiação: Visual Studio/C# Primeiro ano premiado: 2009 Número de prêmios MVPs: 9 /vcavalcante.tech @vcavalcante Biografia Programador, Microsoft MVP, Não gerente blog.lambda3.com.br, podcast.lambda3.com.br, dotnetarchitects.net blog.lambda3.com.br podcast.lambda3.com.br
  • 7.
    podcast.lambda3.com.br 0 – Eventos 1– Docker 2 – .NET Core RC2 3 – Git 4 – Estudo 5 – Open Source 6 – Xamarin 7 – Node.js 8 – Democracia organizacional 9 – O programador poliglota ... Toda semana em:
  • 9.
    Acreditamos que adiversidade, em suas diversas expressões, deve ser respeitada e valorizada, e que uma sociedade mais diversa é uma sociedade melhor. diversidade.tech
  • 10.
  • 11.
    ASP.NET • Using ASP.NETCore previews in Azure App Service • Introducing HttpClientFactory • Improvements for using HTTPS • Improvements for building Web APIs • Introducing compatibility version in MVC • Getting started with SignalR • Introducing global tools • Using Razor UI in class libraries • Improvements for GDPR • Improvements to the Kestrel HTTP server • Improvements to IIS hosting • Functional testing of MVC applications • Introducing Identity UI as a library • Hosting non-server apps with GenericHostBuilder
  • 12.
    Usando os previewsno Azure • Deploy auto contido • Contêineres • Extensão do site preview 1
  • 13.
    Novo HttpClientFactory • Auxiliano uso correto do HttpClient • Tempo de vida do HttpClient, uso correto de portas de saída, etc • HttpClient lógicos • Novo “middleware de saída” com o uso de delegating handlers • Uso do Polly • Retry, circuit breaker, etc
  • 14.
    Melhorias pra https •Problemas de não usar https: • Piora SEO • Marca o site como inseguro • GDPR • Piora o uso do navegador (acesso a geolocalização, movimento, notificações, cache, getUserMedia, e todas as novas funcionalidades) • Https em dev (certificado auto assinado, middleware) • Redirecionamento para https • Suporte a HSTS • Habitando https via configuração
  • 15.
    Melhorias na construçãode APIs Web • Resposta automática com status 400 em caso de erro de validação • Inferência inteligente dos parâmetros de ações • Attribute routing obrigatório • Retorno de ActionResult<T> • Melhoria no uso de Swagger/OpenAPI spec • Melhor processamento das entradas • Melhores erros em caso de problemas na validação • Problem details (RFC 7808) • Suporte à operação “test” com Http Patch e Json
  • 16.
    Compatibilidade para MVC •Forma de evoluir sem quebrar todo mundo em versão minor • Correção de problemas históricos e melhorias significativa com risco baixo • Evolução controlada: • Marca item/comportamento como obsoleto • Evolui comportamento via configuração • Remove comportamento na próxima major • No template: services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); xkcd.com/1172/
  • 17.
    SignalR de volta! •Reescrito mas familiar • Lições aprendidas • Sem necessidade de pacotes de Nuget adicionais • Frontend no pacote npm @aspnet/signalr • Independência do jQuery
  • 18.
    Razor via bibliotecas •Permite utilizar Razor via libs • É possível sobrescrever views, parciais ou não e templates • Identity como biblioteca
  • 19.
    Suporte ao GDPR •Lei da UE que começa a valer esse ano e toca privacidade • Https • Consentimento de cookies • Cookie essencial • Controle de download de dados
  • 20.
    Melhorias no servidorKestrel • Saindo do libuv • Melhorias de sockets e Span<T> • Mais desempenho e consistência entre plataformas
  • 21.
    Melhorias na hospedagemvia IIS • Request handler via Nuget • Aplicação in-process, ganho de 440% de desempenho • Troca pra out-of-process é configuração • Debug direto do w3wp
  • 22.
    Testes funcionais deaplicações MVC • Já era possível desde a versão 1.0 • Pacote Microsoft.AspNetCore.Mvc.Testing • Auxilia em problemas comuns de testes funcionais com ASP.NET Core • Arquivo .deps • Raiz do projeto • Cria WebApplicationTestFixture<TStartup>
  • 23.
  • 24.
    .NET • Global tools •Melhoria no tempo de build • Minor-Version Roll-forward • Desempenho de Sockets • HTTP handler gerenciado • Span<T>, Memory<T> e seus amigos • Windows Compatibility Pack • Mais plataformas • Novidades com Docker http://bit.ly/novidadesnet21
  • 25.
    Global Tools • dotnetinstall tool -g <ferramenta> • Semelhante às ferramentas globais do npm • Exemplos: • github.com/lambda3/dotnetps • github.com/lambda3/dx • Multiplataforma • Referências: • bit.ly/net21globaltools • bit.ly/criandoglobaltools
  • 26.
  • 27.
    Minor-Version Roll-forward • Usoautomático de versão superior do runtime • Somente em caso de ausência da versão especificada • Somente minor ou patch, nunca major • Pode-se optar por não fazer • Exemplo: 2.1.0 => 2.1.1 (ou 2.2.0)
  • 28.
    Desempenho de Sockets •Troca de socket nativo pra código gerenciado .NET • Uso de Span<T> e Memory<T> • Melhorias de desempenho
  • 29.
    Http handler gerenciado •Utilizando a nova implementação de sockets • Mais desempenho • Sem dependência do ies libcurl (Linux) e WinHTTP (Windows) • Comportamento consistente entre plataformas
  • 30.
    Span<T>, Memory<T> eseus amigos • Mais eficiência no uso da memória • Projeção de arrays • Mais informações na palestra de C# amanhã
  • 31.
    Windows Compatibility Pack •Facilita portar aplicações para o .NET Core • Algumas dependências são somente pro Windows • Caminho: • Porte com o WCP (somente Windows) • Troque as dependências exclusiva de Windows • Remova o WCP • nuget.org/packages/Microsoft.Windows.Compatibility
  • 32.
    Mais plataformas • WindowsClient: 7, 8.1, 10 (1607+) • Windows Server: 2008 R2 SP1+ • macOS: 10.12+ • RHEL: 7+ • Fedora: 26+ • openSUSE: 42.3+ • Debian: 8+ • Ubuntu: 14.04, 16.04, 17.10+ • SLES: 12+ • Alpine: 3.6+
  • 33.
    Novidades com Docker •Imagens menores • Imagens mais seguras (menos superfície de ataque) • Imagens: • Alpine SDK e runtime • Ubuntu 18.04 • Runtime com
  • 35.
    #mvpconf Encerramento: • Considerações Finais •Perguntas e Respostas • Agradecimentos
  • 36.
    w w w.l a m b d a 3 . c o m . b r Obrigado! Giovanni Bassi Victor Cavalcante