4. 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.
5. For a modern Web
ciandt.com
Lightweight e Modular
Inspirado em novas tecnologias como:
- Stack para Ruby
- Connect para NodeJS
- WSGI para Python
6. 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.
10. É 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.).
11. É 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.
12. É 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.
13. Katana self-service pipeline
ciandt.com
Host Server
Middlewar
e
Application
IIS
Self-Host
Node JS
Custom Host
System.Web
HttpListener
Authentication
WebApi
Logging
Dependency
Injection
Your Code!
And a lot more
14. 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.
16. 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
18. 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
19. 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
20. 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
22. 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.