2010-07-22 31 views
5

Ok Tôi muốn tìm hiểu thêm về cách ASP.Net hoạt động dưới mui xe. Tôi có nghĩa là dưới MVC hoặc Webforms và các khuôn khổ như vậy.Cách tạo một ứng dụng HttpApplication barebones cho ASP.Net (không có Webforms hoặc MVC)

Về cơ bản tôi muốn biết các khung công tác đó được kết nối với ASP.Net như thế nào để chúng hoạt động với IIS. Điều gì sẽ là tối thiểu để tạo ra một HttpApplication đơn giản mà làm việc với IIS và sử dụng không MVC hoặc Webforms? Mức tối thiểu cần thiết để có trong Web.config là gì? Điều gì sẽ được thêm vào Global.asax?

+0

tôi đề nghị bạn sử dụng [Reflector] (http://www.red-gate.com/products/ reflector/index.htm) để tìm hiểu. –

+0

@ John vấn đề là có quá nhiều thứ để xem xét. Tôi có nghĩa là chỉ cần đếm bao nhiêu tham chiếu lắp ráp là trong một web.config tiêu chuẩn – Earlz

Trả lời

2

Tôi thực sự muốn tự trả lời câu hỏi này như tôi đã làm. smartcaveman cung cấp một phần của giải pháp.

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

và sau đó trong 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(); 
} 

và sau đó bạn có thể sử dụng bộ xử lý ASP.Net cho nội dung (như hình) hoặc bạn có thể của khóa học viết thay thế của riêng bạn và viết để trả lời chính mình.

Để tham khảo, khuôn khổ làm việc của tôi tôi đã thực hiện với một động cơ định tuyến tùy chỉnh (và động cơ xem) là trong subversion here

6

Viết một lớp kế thừa từ IHttpHandler. Định nghĩa giao diện là:

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

HttpContext là tất cả những gì bạn cần để thực hiện một ứng dụng. Nó hoạt động như một mặt tiền cho mọi thứ liên quan đến sự tương tác. Thuộc tính Server cung cấp cho bạn thông tin về máy chủ. Thuộc tính Request cung cấp cho bạn thông tin về HttpRequest và thuộc tính Response cung cấp phương tiện để hiển thị đầu ra cho máy khách.

Đề xuất của tôi là sử dụng Reflector trên HttpContext và nhận được cảm nhận về nội dung chứa trong đó và cách hoạt động của mỗi thành phần.

Dưới đây là một ứng dụng ví dụ cơ bản:

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 không nhất thiết phải chứa bất cứ điều gì. Nó có lẽ là thực hành tốt hơn để xử lý các sự kiện toàn cầu bằng cách sử dụng một lớp có nguồn gốc từ IHttpModule.

web.config phải được xử lý khác nhau tùy thuộc vào việc bạn đang sử dụng IIS 7 hay cái gì khác. Dù bằng cách nào, có một phần HttpHandler, nơi bạn phải đăng ký xử lý tùy chỉnh của bạn để xử lý tất cả các yêu cầu.

Bạn có thể đặt web.config rất tối thiểu, nhưng số lượng phần cấu hình được bao gồm tùy thuộc vào tính năng bạn muốn. Ngoài ra, một số thứ được xử lý bởi web.config có thể được quản lý trực tiếp với IIS. Xem http://msdn.microsoft.com/en-us/library/b5ysx397(v=VS.85).aspx để biết thêm về điều này.

Tôi hy vọng điều này sẽ hữu ích. Chúng tôi có thể cung cấp cho bạn thông tin tốt hơn nếu bạn cụ thể hơn với những gì bạn đang tìm kiếm.

Các vấn đề liên quan