owin e katana
TRANSCRIPT
![Page 1: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/1.jpg)
OWIN & Katana
ciandt.com
Tanato Cartaxo17/08/2016
![Page 2: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/2.jpg)
● Overview OWIN e Katana● Porque utilizar Katana?● Let’s Code!
○ Inicialização do Katana○ Construindo Middlewares
● Ferramentas○ TopShelf
ciandt.com
Sumário
![Page 3: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/3.jpg)
OWIN
ciandt.com
![Page 4: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/4.jpg)
O que é?
ciandt.com
OWIN define uma interface entre web servers e web applications em .Net
O intúito do OWIN é prover um padrão para desacoplamento entre servidor e aplicação, incentivando o desenvolvimento modular de middlewares para integrar o pipeline de uma aplicação web.
![Page 5: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/5.jpg)
For a modern Web
ciandt.com
Lightweight e Modular
Inspirado em novas tecnologias como:- Stack para Ruby - Connect para NodeJS- WSGI para Python
![Page 6: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/6.jpg)
OWIN == Katana?
ciandt.com
Katana é o projeto da Microsoft com diversos componentes construidos implementando a interface OWIN.
Inclúi módulo compacto para Self-Host de uma aplicação web.
![Page 7: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/7.jpg)
OWIN Stack
Host
Server
Middleware
Application
ciandt.com
![Page 8: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/8.jpg)
Middleware
ciandt.com
![Page 9: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/9.jpg)
Porque utilizar Katana?
ciandt.com
![Page 10: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/10.jpg)
É leve e escalável!
ciandt.com
Possibilidade de escolha dos componentes do middleware ao servidor e host permite a escolha de opções mais leves e rápidas.
Nenhuma funcionalidade é carregada por padrão, apenas funcionalidades realmente necessárias são carregadas no pipeline da aplicação.
Não depende diretamente do System.Web, que contém um overhead para diversas tecnologias (SessionState, WebForms e etc.).
![Page 11: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/11.jpg)
É modular!
ciandt.com
Módulos são incluidos, removidos e substituidos de forma simples.
Módulos são criados para funções específicas e por isso tendem a ser leves. À medida que frameworks são desenvolvidos e atualizados estes podem adicionar novas funcionalidades ou corrigir erros sem impactar nos demais módulos da aplicação.
![Page 12: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/12.jpg)
É simples!
ciandt.com
Abordagem limpa, facilita o desenvolvimento de um pipeline compreensível.
Sem dependências do IIS e outros componentes.
Fácil desenvolvimento de custom middlewares quando necessário.
![Page 13: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/13.jpg)
Katana self-service pipeline
ciandt.com
Host Server Middleware
Application
IIS
Self-Host
Node JS
Custom Host
System.Web
HttpListener
Authentication
WebApi
Logging
Dependency Injection
Your Code!
And a lot more
![Page 14: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/14.jpg)
Vantagens de Self-Host em relação ao IIS
ciandt.com
Lightweight/Low Memory Footprint.
Carrega apenas o necessário para o pipeline.
Não necessita configuração complexa do IIS.
IIS é dependente da versão do SO, atualizações são dependentes da versão do SO.
![Page 15: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/15.jpg)
Let’s Code!
ciandt.com
![Page 16: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/16.jpg)
using AppFunc = Func<IDictionary<string, object>, Task>;
public class Startup{ public void Configuration(IAppBuilder app) { app.Use(new Func<AppFunc, AppFunc>(SomeMiddleware));
var config = new HttpConfiguration(); config.Routes.MapHttpRoute("default", "api/{controller}");
app.UseWebApi(config); }}
Inicialização do OWIN
ciandt.com
![Page 17: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/17.jpg)
using AppFunc = Func<IDictionary<string, object>, Task>; //done
OWIN middleware contract
OWIN environment dictionary
Return Task
ciandt.com
owin.RequestBodyowin.RequestHeadersowin.RequestMethodowin.ResponseBodyowin.ResponseHeaders...
![Page 18: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/18.jpg)
using AppFunc = Func<IDictionary<string, object>, Task>;
public AppFunc SomeMiddleware(AppFunc next){ // Cria uma função AppFunc utilizando Lambda AppFunc appFunc = async (IDictionary<string, object> environment) => { // Faz algum processamento ("inbound")... // Chama e espera a execução do próximo middleware await next.Invoke(environment);
// Faz algum outro processamento ("outbound") }; return appFunc;}
Exemplo de um middleware OWIN em função
ciandt.com
![Page 19: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/19.jpg)
public class MyOwinMiddleware : OwinMiddleware{ public MyOwinMiddleware(OwinMiddleware next) : base(next) { }
public async override Task Invoke(IOwinContext context) { // Faz algum processamento ("inbound")... // Chama e espera a execução do próximo middleware await next.Invoke(context);
// Faz algum outro processamento ("outbound") }}
Exemplo de um OwinMiddleware - Tipado
ciandt.com
![Page 20: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/20.jpg)
using Microsoft.Owin.Hosting;
class Program{ static void Main(string[] args) { WebApp.Start<Startup>("http://localhost:8080"); Console.Write("Press any key to exit..."); Console.ReadLine(); }}
SelfHosting de uma aplicação web
ciandt.com
![Page 21: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/21.jpg)
Ferramentas
ciandt.com
![Page 22: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/22.jpg)
TopShelf
ciandt.com
Framework para host de aplicações em forma de serviço.
Criação de uma classe de serviço dentro de um console application.
Rodar a aplicação via console application facilita o debug.
Facilidade para instalar o serviço a partir do Topshelf command line.
![Page 23: Owin e katana](https://reader035.vdocuments.site/reader035/viewer/2022062401/58ed51191a28abdf548b462f/html5/thumbnails/23.jpg)
OBRIGADO!