2010-07-22 8 views
5

Ok Sto volendo saperne di più su come ASP.Net funziona sotto il cofano. Intendo al di sotto di MVC o Webform e altri framework di questo tipo.Come creare un barebone HttpApplication per ASP.Net (senza Webforms o MVC)

Fondamentalmente voglio sapere come questi framework sono collegati a ASP.Net in modo che funzionino con IIS. Quale sarebbe il minimo indispensabile per creare una semplice HttpApplication che funzionasse con IIS e non usasse MVC o Webforms? Qual è il minimo richiesto per essere in Web.config? Cosa verrebbe aggiunto a Global.asax?

+0

ti suggerisco di usare [Riflettore] (http://www.red-gate.com/products/ reflector/index.htm) per scoprirlo. –

+0

@ John il problema è che c'è così tanto da guardare. Voglio solo contare quanti riferimenti di assembly sono in un web.config standard – Earlz

risposta

2

In realtà intendevo rispondere a questa domanda come l'ho fatto io. smartcaveman fornisce parte della soluzione.

What I did per 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> 

e poi in 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(); 
} 

e quindi è possibile utilizzare i gestori di ASP.Net per i contenuti (come mostrato) oppure si può di naturalmente scrivi la tua sostituzione e scrivi tu stesso alla risposta.

Per riferimento, il mio quadro di lavoro che ho fatto con un motore di routing personalizzato (e motore di visualizzazione) è in subversion here

6

Scrivere una classe che eredita da IHttpHandler. La definizione interfaccia è:

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

HttpContext è tutto ciò che serve per eseguire un'applicazione. Agisce come una facciata per tutto ciò che è coinvolto nell'interazione. La proprietà Server fornisce informazioni sul server. La proprietà Request fornisce informazioni su HttpRequest e la proprietà Response fornisce un mezzo per eseguire il rendering dell'output sul client.

Il mio suggerimento è di usare Reflector su HttpContext e avere un'idea di cosa contiene e di come funzionano ciascuno dei suoi componenti.

Ecco un esempio di applicazione di base:

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 non deve contenere qualsiasi cosa. È probabilmente una pratica migliore per gestire gli eventi globali utilizzando una classe derivata da IHttpModule.

web.config deve essere gestito in modo diverso a seconda che si utilizzi IIS 7 o altro. Ad ogni modo, c'è una sezione HttpHandler in cui devi registrare il tuo gestore personalizzato per gestire tutte le richieste.

È possibile rendere il web.config molto ridotto, ma la quantità di sezioni di configurazione incluse dipende dalle funzionalità desiderate. Inoltre, alcune delle cose gestite da web.config possono essere gestite direttamente con IIS. Visualizza http://msdn.microsoft.com/en-us/library/b5ysx397(v=VS.85).aspx per ulteriori informazioni.

Spero che questo aiuti. Possiamo darti maggiori informazioni se sei più specifico con quello che stai cercando.

Problemi correlati