Buscando a Nemo y a Dory con Katana

Anda que no estoy buscando pececillos. Que estoy buscando puertos y misterios.

Los puertos es sencillo si Owin/Katana son un clon de  Node quiero saber quien abre esos puertos. Con lo cual ya tenemos a Nemo localizado.

Lo otro es un poco más complicado pero encontrando a Dory vamos a encontrar a Nemo.

Que maravilla de la ciencia!!! que crees una clase llamada Startup y que tenga un método con una firma determinada y entonces pases de tener una web pesada a una fluida y alegre tiene que esconder algo.

Firma del Metodo.

public void Configuration(IAppBuilder app)
{
}

Vamos a ver que creo que algo se nos está olvidando , es que nos acordáis del ViewState.

Tu sabes WinForms pues corriendo que haces Web. Lo mismo te acabas de dar un golpe en la nuca que te deja como a Dory(con la memoria fuera de juego).

Que no señores, que no son velocípedos simplemente son menos pesadas y por tanto al cumplir con el patrón “engañabobos” dan la sensación de ir fluidas y  por tanto es de agradecer.

Pues la misma sensación tengo con Katana, pero esta vez va a ser peor, cuidado con el que se olvide de instalar un módulo porque el susto va a ser gordo, seguridad, etc, etc….

Bueno como siempre menos royos y vamos a encontrar a Dory que a la postre es nuestra iniciadora.

¿Porque Startup y Configuration?

La primera de las deducciones es sencilla, si esto lo hago correr en Selft Host. Lo mismo entro en colisión con un Main.

La segunda es más sencilla, porque me apetece y me parecen nombres lo suficientemente significativos como para que alguien se acuerde, buena impresión.

Pero como todo esto sale a la luz?

Pues mirando nuestro magnífico Visual Studio y concretamente el Stack Trace.

Stack

Bueno pues ya tenemos un Main y un Configuration Sonrisa.

Pero vemos un MakeDelegate, hablamos de nuevo de Reflection?

Yo creo que sí.

Vamos a irnos a este código que ya sabéis de donde lo saco….

 

Configuration

Que si señores, que se puede ver que por defecto siempre es este y sino al Xml del WebConfig. Y a lidiar con el post del más listo.

http://www.variablenotfound.com/2013/10/owin-y-katana-iv-startup-y-configuration.html

http://www.asp.net/aspnet/overview/owin-and-katana/owin-startup-class-detection

Así que ya hemos sacando a Dory  de su escondite Sonrisa.

Ahora vamos con el pez payaso y veréis que tiene capa sobre capa y más capa alguien sabe lo que es un wrapper pues cuidado que sino te duchas lo más normal es que alguna vez te llamen eso…Casposo….

Listener

Madre mía si el Owin corre sobre el System.Net.HttpListner

HttpListener

Versión del Framework 2.0 y mientras tanto yo jugando con binarios y con WCF RestFull.

Ya lo dije en mi post anterior.

http://geeks.ms/blogs/phurtado/archive/2013/12/12/la-casta-241-a-con-gusanos.aspx

WebServices

Que ocurre que todo lo que corra en Owin  a fecha de hoy sobre IIS y si alguno está interesado se lo puedo explicar corre sobre HttpApplication.

De lo que puedo deducir que no me la quito ni queriendoSonrisa y mira que tengo ganas….

Os paso ahora unas pruebas en #Node,#Go y C#.

Ojo a los test que no es lo que yo quería pero me gusta jugar en campo neutral..

Node.

var http = require(‘http’);
http.createServer(function (req, res) {
  res.writeHead(200, {«Content-Type»: «application/json»});
  res.end(JSON.stringify({Id:1,Name:’Pedro Hurtado’}));
}).listen(3000, ‘localhost’);

Test.

Node

Go.

package main
import (
    «encoding/json»
    «net/http»
)
type customer struct {
    Id   int
    Name string
}
func Get(w http.ResponseWriter, req *http.Request) {
    w.Header().Set(«Content-Type», «application/json»)
    b, _ := json.Marshal(customer{1, «Pedro Hurtado»})
    w.Write(b)
    return
}
func main() {
    http.HandleFunc(«/api/test», Get)
    http.ListenAndServe(«localhost:4000», nil)
}

Test

Go

 

Owin

Controlador.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;

namespace ClassLibrary2.Controllers
{
    public class TestController:ApiController
    {
        public HttpResponseMessage Get()
        {          
            return Request.CreateResponse(HttpStatusCode.Ok, new { Id = 1, Name = «Pedro Hurtado» });
        }

    

    }
}

Configuration(Dory).

using Microsoft.Owin.Hosting;
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Owin;

namespace ClassLibrary2
{
    public class Program
    {
        public static void Main()
        {
            using (WebApp.Start<Startup>(«
http://localhost:5000″))
            {
                Console.WriteLine(«Server startet»);
                Console.ReadLine();
            }
           
        }
    }
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            HttpConfiguration config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                name: «DefaultApi»,
                routeTemplate: «api/{controller}/{id}»,
                defaults: new { id = RouteParameter.Optional }
            );
            app.UseWebApi(config);
        }
    }
}

Test.

c#

Así que señores en unos combates bastante ajustados creo que podemos hablar de tablas entre Go,NodeWebApi(Ya no cuento lo que puede pasar si Owin se hostea en IIS).

Ojo que no tengo ni idea de que va esto de los gráficos, me estoy ciñendo a las alturas y a “Pages/Sec” corroborado con esta otra herramienta Apache HTTP server benchmarking tool donde los resultados eran parecidos y tras esta referencia he pedido el favor a un Visual Studio Ultimate para las pruebas,

What is concurrent request (-c) in Apache Benchmak?

Y de este otro magnifica entrada

Should I use Threads or Tasks – Multiple Client Simulation.

Donde os prometo que yield return no entra en mi reducida cabeza….

Así que si cualquiera quiere opinar es libre y todo es sabiduría para la comunidad.

Conclusiones.

Que si sobre caspa somos capaces de no llevarnos todas las leches en el mismo lado, sino que nos mantenemos en pie hasta el último asalto, que está pasando?

Seguimos ocultando conocimientos al resto, donde todos piensan que las versiones actuales son la final four (eso dice nuget).

!==pre.

Pues no señores. Queda mucho por llegar y estoy convencido de que vamos a ganar.

Pero si a esto le sumas, que ciertas herramientas solo están disponibles para….

Y que cierta información no es pública y lo entiendo.

Al final todo el mundo corre en torno a unas corrientes que no nos llevan a otra cosa que por muchos intentos de Open Source, no se traducen en más que en un constante Tira Códigos(Esa es mi opinión a fecha de hoy. Otro más y hasta cuando.

Coincido  con este post del amigo @r_corral. no al 100% sino en más del 120%.

¿Hasta donde podemos llegar?.

Ahora no coincido con estás otras cosas cosas

 No hace falta renovar Geeks. 

Pienso que estamos montados sobre un Dodge Negro que voló hace 40 años(La Cía  me persigue).

No discuto visitas ni números, discuto una cosa sencilla.

Hace tiempo quizás no mucho me hubiese sentido cómodo con un coche viejo pero en la actualidad estamos acostumbrados a cambiar de coche o que nos digan.

No te montes más que te cuesta más el arreglo que uno nuevo. cc @wasat.

Veis que sencillas son mis quejas. Claras y concisas y creo que las entiende toda la comunidad que para eso estamos……

Ahora hoy uno del Barça declarado le acaba de meter en el Bernabeu a uno del Madríd un 0-5( que ya es costumbre).

Quieres que te meta el 6 pues este es seudónimo de un gas ligero que tiene un peso atómico de 4,0026 y que se encuentra en la misma fila que el

Neon ,Argon, Kripton, Xenon y Radon.

Te voy a explicar lo que pasa con los Routes. Que si están optimizados de aquella manera en WebApi 2.0 Sonrisa

Que les falta un campo un string[] ExcludeRoutes. Atento que este es el 0-7 y ya se convierte en Historia, pero en situaciones extremas sigue arrastrandose.

No es lo mismo guardar un Dictionary<string,object> donde string es el path y object el metodo como lo hace Node y Go que descubrir e invocar el Object con ….

Recuperar información almacenada en atributos.

Con lo cual no me retes que te meto el 0-8 Lengua fuera.

Edu cual prefieres este https://github.com/Bobris/Nowin o el gas ligero xDDDDD.

P.D. Ahora si que es FELIZ NAVIDAD Y PROSPERO AÑO NUEVO. Que lo mismo no puedo volverSonrisa  Pero las dudas de Owin y WebApi creo que han quedado claras y es que lo mejor está por llegar .

 

2 comentarios sobre “Buscando a Nemo y a Dory con Katana”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *