23
OWIN & Katana ciandt.com Tanato Cartaxo 17/08/2016

Owin e katana

Embed Size (px)

Citation preview

Page 1: Owin e katana

OWIN & Katana

ciandt.com

Tanato Cartaxo17/08/2016

Page 2: Owin e katana

● 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

OWIN

ciandt.com

Page 4: Owin e katana

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

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

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

OWIN Stack

Host

Server

Middleware

Application

ciandt.com

Page 8: Owin e katana

Middleware

ciandt.com

Page 9: Owin e katana

Porque utilizar Katana?

ciandt.com

Page 10: Owin e katana

É 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

É 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

É 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

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

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

Let’s Code!

ciandt.com

Page 16: Owin e katana

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

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

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

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

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

Ferramentas

ciandt.com

Page 22: Owin e katana

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

OBRIGADO!