用程序来代替IIS打开ASP.NET

这是一个用程序来直接执行ASP.NET页面,一般我们是用IE打开的,现在我们用.NET中提供的功能来打开一个ASP.NET文件.执行后产生HTML代码。

我用一个控制台程序!在开始必须引用System.Web.dll这个名称空间,

代码:

using System;
using System.Web;                          //Web引用
using System.Web.Hosting;
//System.Web.Hosting命名空间提供在 Microsoft Internet 信息服务 (IIS) 之外的托管应用程序中承载 ASP.NET 应用程序的功能。

首先创建一个HOST类,用于处理Web请求

public class MyExeHost : MarshalByRefObject   //继承MarshalByRefObject  类
{
    public void ProcessRequest(String page)          //处理ASP.NET页面的请求
    {
        Console.WriteLine("---------HTML CODE-----------");
        HttpRuntime.ProcessRequest(new SimpleWorkerRequest(page, null, Console.Out));  
    }
}
/*ProcessRequest方法的参数是一个HttpWorkerRequest类的实例,但是在Web名称空间下的HttpWorkerRequest是必须被继承的一个类,但是在System.Web.Hosting名称空间下有个实现了HttpWorkerRequest的类,叫SimpleWorkerRequest,SimpleWorkerRequest类的构造函数有2个,我选择了第一个。*/

public class App                  //控制台程序
{
    public static void Main(string[] args)
    {
        string DocPath;                    //存放一个ASP.NET页面的路径
        MyExeHost Host;                    //声明MyExeHost 类的一个变量

        Host = (MyExeHost)ApplicationHost.CreateApplicationHost(typeof(MyExeHost), "/host", Environment.CurrentDirectory);
        /*ApplicationHost是System.Web.Hosting名称空间下的一个类,使得能够在Internet 信息服务 (IIS) 应用程序之外承载 ASP.NET 页。此类使宿主能够创建用于处理 ASP.NET 请求的应用程序域。CreateApplicationHost方法是:创建并配置用于承载 ASP.NET 的应用程序域。第一个参数是:创建一个用于请求ASP.NET的类也就是我们在之前创建的MyExeHost 类,第二个参数是:应用程序域的虚拟目录;例如/myapp,一般这个路径就代表引用程序的目录,第三个参数的意思是:应用程序域的物理目录,这个非常重要!设置不对就运行不起来,这个就是本应用程序的物理路径,在这个程序对ASP.NET处理时会调用这个路径下的 bin目录,里面的Web应用程序,也就是我们的 本程序 */
        DocPath = Console.ReadLine();           //读取你输入的一个ASP.Net页面,页面如果在本应用程序路径里就直接打文件名,否则打出全路径。
        Host.ProcessRequest(DocPath);           //将页面传给ProcessRequest  处理 

        Console.ReadLine(); 
    }
}

运行后显示执行ASP.NET页面后产生的HTML,你可以在加上IO下入文件用IE打开(哈哈,我就不写了)

注意的是:生成后在应用程序下必须在创建一个BIN目录,里面将本应用程序考到BIN目录下!在去运行生成的程序,一定要保证所运行的程序下有个BIN目录里面有本程序。

WINXP + SP1 + VS2003.NET 编译通过!

有不对的请指点

Contributors: FHL