2010-07-22 11 views
5

Ok, estoy deseando aprender más sobre cómo funciona ASP.Net bajo el capó. Me refiero debajo de MVC o Webforms y otros marcos similares.Cómo crear una HttpApplication de barebones para ASP.Net (sin Webforms o MVC)

Básicamente, quiero saber cómo se conectan esos marcos en ASP.Net para que funcionen con IIS. ¿Cuál sería el mínimo indispensable para crear una aplicación Http simple que funcionó con IIS y no usó ni MVC ni Webforms? ¿Cuál es el mínimo necesario para estar en Web.config? ¿Qué se agregaría a Global.asax?

+0

le sugiero que utilice [Reflector] (http://www.red-gate.com/products/ reflector/index.htm) para averiguar. –

+0

@John el problema es que hay mucho que mirar. Me refiero a solo contar cuántas referencias de ensamblaje hay en una web.config estándar – Earlz

Respuesta

2

En realidad, tenía la intención de responder esta pregunta yo mismo como lo hice. smartcaveman proporciona parte de la solución.

What I did de web.config:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
     <compilation debug="true"> 
     </compilation> 
    </system.web> 
    <system.codedom> 
     <compilers> 
      <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
       <providerOption name="CompilerVersion" value="v3.5"/> 
       <providerOption name="WarnAsError" value="false"/> 
      </compiler> 
     </compilers> 
    </system.codedom> 
    <!-- 
    The system.webServer section is required for running ASP.NET AJAX under Internet 
    Information Services 7.0. It is not necessary for previous version of IIS. 
    --> 
    <system.webServer> 
    </system.webServer> 
    <runtime> 
    </runtime> 
</configuration> 

y luego en global.asax:

protected virtual void Application_BeginRequest (Object sender, EventArgs e) 
{ 
    if (Request.Url.AbsolutePath == "/test") 
    { 
     var h=new Test1(); //make our Test1.ashx handler 
     h.ProcessRequest(Context); 
    } 
    else 
    { 
     Response.ContentType = "text/plain"; 
     Response.Write("Hi world!"); 
    } 
    CompleteRequest(); 
} 

y luego se puede utilizar controladores de ASP.NET para el contenido (como se muestra), o bien de Por supuesto, escriba su propio reemplazo y escriba a Response usted mismo.

Como referencia, mi marco de trabajo que hice con un motor de enrutamiento personalizado (y el motor de vista) se encuentra en subversion here

6

Escriba una clase que hereda de IHttpHandler. La definición de interfaz es:

public interface IHttpHandler 
{ 
    void ProcessRequest(HttpContext context); 
    bool IsReusable { get; } 
} 

HttpContext es todo lo que necesita para ejecutar una aplicación. Actúa como una fachada para todo lo que está involucrado en la interacción. La propiedad Server le brinda información sobre el servidor. La propiedad Request le brinda información acerca de HttpRequest y la propiedad Response proporciona un medio para presentar la salida al cliente.

Mi sugerencia es utilizar Reflector en HttpContext y obtener una idea de lo que contiene y cómo funciona cada uno de sus componentes.

Aquí está un ejemplo de aplicación básica:

public class HelloWorldHandler: IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.Write("Hello World"); 
     context.Response.End(); 
    } 

    public bool IsReusable 
    { 
     get { return false; } 
    } 
} 

Global.asax no tiene que contener cualquier cosa. Probablemente sea una mejor práctica manejar eventos globales utilizando una clase derivada de IHttpModule.

web.config tiene que manejarse de manera diferente dependiendo de si está utilizando IIS 7 u otra cosa. De cualquier manera, hay una sección HttpHandler donde tiene que registrar su controlador personalizado para manejar todas las solicitudes.

Puede hacer que el archivo web.config sea mínimo, pero la cantidad de secciones de configuración incluidas depende de las características que desee. Además, algunas de las cosas manejadas por web.config se pueden administrar directamente con IIS. Ver http://msdn.microsoft.com/en-us/library/b5ysx397(v=VS.85).aspx para más información sobre esto.

Espero que esto ayude. Podemos darle mejor información si es más específico con lo que está buscando.

Cuestiones relacionadas