Mono入门 - ASP.NET配合XSP和Apache






4.82/5 (50投票s)
2005年3月3日
29分钟阅读

619615
这是关于Mono系列文章的第二篇。本文将介绍如何使用Mono,在Linux上利用XSP和Apache来托管和提供ASP.NET Web应用程序和Web服务。
引言
这是我正在撰写的关于Mono系列入门文章中的第二篇,“基于.NET框架的开源开发平台”。在这篇文章中,我们将着眼于如何在Mono平台上开始使用ASP.NET。虽然ASP.NET不是ECMA和ISO标准的一部分(如第一篇文章中提到的)[^],但它仍然是.NET平台的主要卖点之一,并为开发Web应用程序和Web服务提供了一个极其灵活和强大的平台。虽然你可以在多种不同的操作系统上为Mono开发ASP.NET应用程序,但本文主要关注Linux,尽管如此,我也会简要介绍如何在Windows上运行XSP。我将集中讨论Linux上的ASP.NET的原因是,那些对Windows上的ASP.NET感兴趣的人可以通过IIS获得极其强大的选择,我衷心推荐在Windows上使用IIS来处理ASP.NET。
ASP.NET在Mono中的地位如何?
Mono的最新稳定版本1.0.5,已经完全实现了ASP.NET功能。这包括对ASP.NET Web Forms和Web Services的全面支持。这基本上意味着,你在.NET Framework中开发的几乎任何ASP.NET应用程序都可以在Mono上运行。当然,可能需要进行一些修改,例如数据访问的更改,移除对尚未在Mono中实现、依赖于.NET Framework BCL类型的代码,以及移除任何使用平台调用(Platform Invoke)的代码等等。目前,Mono中的ASP.NET支持可以被认为是优秀的,并且许多公开可用的Web应用程序已经利用了Mono的ASP.NET支持。根据Mono网站的说法,Mono Web Services堆栈正在被SourceGear的源代码控制应用程序Vault[^]使用,并且Mono的ASP.NET实现的一些方面也用于OpenLink的Virtuoso[^]产品。
XSP和mod_mono是什么?
如果你没有办法托管你的Web应用程序和Web Services,那么开发它们就没有多大意义,对吧?传统上,你会在Windows上使用IIS来托管ASP.NET应用程序,尽管还有其他一些免费的ASP.NET Web服务器可用,例如Cassini[^]。然而,在使用Mono的ASP.NET时,你在托管ASP.NET应用程序的Web服务器方面有两种主要选择。
- XSP
- Apache
在本文中,我们将探讨如何在Windows和Linux上使用XSP以及Apache来托管你的ASP.NET Web应用程序和Web Services。
XSP
XSP是一个“轻量级Web服务器”,能够托管和提供ASP.NET应用程序。它使用C#编写,广泛使用了System.Web
命名空间中的类,XSP的源代码可以从Mono的下载页面[^]下载。值得注意的是,XSP Web服务器可以在Mono运行时和.NET运行时上运行,这意味着如果你正在寻找一个轻量级的Windows ASP.NET Web服务器,但又不想使用Mono,或者你不在乎Mono,你仍然可以使用XSP。的“让XSP运行起来”部分介绍了如何在Windows和Linux上安装和使用XSP。
Apache
Apache可能是Linux上事实上的标准Web服务器。Apache广泛使用模块来托管和提供用多种不同的Web编程语言和脚本开发的Web应用程序。对于熟悉IIS但不熟悉Apache的人来说,可以将这些模块视为ISAPI扩展的等价物。那么,到目前为止,你应该能猜到Apache如何托管和提供ASP.NET应用程序了吧?是的,通过使用Apache模块。这个名为mod_mono的模块允许Apache通过“将请求代理到XSP的一个轻微修改版本,称为mod-mono-server”来提供ASP.NET页面。当你安装XSP时,就会安装mod-mono-server。在撰写本文时,mod_mono模块对于Apache在Linux上的版本有效,但对Windows上的Apache无效。因此,当我们查看Apache上的ASP.NET时,在“Apache与mod_mono”部分,我们只在Linux的上下文中进行讨论。如果你确实希望从Windows上的Apache提供ASP.NET内容,可以参考CP上的这篇文章[^],它演示了如何配置Apache使用Cassini来提供ASP.NET内容,或者参考Apache HTTP CLI[^]项目。
你需要知道什么
本文假设你已经在你选择的平台上安装并运行了Mono。本系列的第一篇文章,“Mono入门 - 你的第一个Mono应用程序”[^],解释了如何在Windows和Linux上安装和运行Mono,所以如果你还没有这样做,请查阅那篇文章。我还假设你熟悉ASP.NET以及ASP.NET编程的语义,因为本文主要关注如何使ASP.NET与XSP和Apache协同工作,而不是ASP.NET编程本身。
让XSP运行起来
在本节中,我们将介绍如何在Windows和Linux上安装和运行XSP。先安装和运行Windows上的版本,是因为我想尽快完成它,而且很可能你已经安装了XSP,考虑到你已经安装了Mono。然后转向Linux,并让XSP在那里运行起来。说实话,如果你已经在Linux上运行Mono(这是本文的前提条件之一),那么安装XSP应该相对容易。
Windows上的XSP
本系列的第一篇文章“第一篇文章”[^]介绍了如何在Windows上安装Mono。文中提到,在安装过程中,安装程序会让你选择要安装的组件。默认情况下,XSP会随Mono一起安装,但如果你在安装时决定不安装XSP,那么最简单的安装方法是卸载Mono然后重新安装。以下是关于如何在Windows 2000或更高版本机器上安装Mono和XSP的步骤。- 从Mono下载页面下载Mono Windows安装程序。我正在使用的文件是http://www.go-mono.com/archive/1.0.5/windows/mono-1.0.5-gtksharp-1.0.5-win32-0.1.exe。
- 安装程序是标准的Windows安装程序,下载完成后只需双击即可运行。
- 安装程序启动后,点击“下一步”进入“许可协议”页面。
- 你可能会注意到,“许可协议”页面上有适用于不同安装组件的若干不同许可。虽然我理解大多数人只是同意并点击“下一步”,但如果我不建议你在同意之前阅读许可协议,那将是不负责任的。
- 通过“许可协议”部分后,你将看到关于安装的一些一般信息。
- 点击“下一步”并选择安装位置。
- 再次点击“下一步”,进入“选择组件”页面。你可以自定义安装,但请务必安装XSP。由于我将在本系列的后续文章中使用此安装的所有组件,我建议你接受默认的“完整安装”。
- 再次点击“下一步”,你可以自定义“开始”菜单中Mono文件夹的名称。
- 安装程序现在会询问你要让XSP Web服务器监听哪个端口。通常情况下是8088端口,但你可以将其更改为你系统上的任何可用端口。准备就绪后,点击“下一步”。
- 最后,点击“安装”来在你的Windows机器上安装和配置Mono和XSP。
读过第一篇文章的各位会注意到,我几乎是照搬了那里的说明……我不是懒,只是没有必要重写已经说过的内容!在Windows上使用XSP的下一步是运行它。“运行XSP”部分解释了如何运行XSP Web服务器,并探讨了一些可以用来修改其默认行为的命令行选项。
Linux上的XSP
与在Linux上安装Mono一样(我们在前一篇文章中已经介绍过),Linux上的事情比Windows上稍微复杂一些。然而,正如我已经提到的,如果你已经安装了Mono,那么安装XSP将是一件很容易的事。我将XSP安装在用于安装Mono的相同系统上。快速回顾一下我使用的具体内容:我使用了Microsoft Virtual PC 2004并创建了两个相同的虚拟PC。然后安装了SuSE 9.2 Professional,禁用了ACPI,并使用了默认的软件包选择。在上一篇文章中,我介绍了如何使用Mono网站上预编译的包来安装Mono,以及如何从源代码安装Mono。因此,在本篇文章中,我将在SuSE 9.2 Professional上安装XSP,该系统使用默认的软件包选择,安装了Mono 1.0.5以及在Mono安装过程中安装的任何其他附加软件包或程序。
在本文中,我们将再次探讨如何从预编译包和源代码进行安装。
使用预编译包安装XSP
正如我确信你还记得(如果你读过的话)第一篇文章,从Mono网站使用预编译包安装是安装和运行Mono的最简单方法之一。同样的方法也适用于安装和运行XSP。所以,请前往Mono下载页面(http://www.mono-project.com/downloads/index.html[^]),看看是否有适用于你特定Linux发行版的预编译包,或者是否有适用于你已知可兼容的发行版的包。如果没有任何包适用于你的发行版,那么请直接跳转到“XSP从源代码安装”部分,我将介绍如何从源代码安装XSP,这是一个简单的过程。
开始吧
- 在Mono下载页面,点击你认为与你的发行版兼容的Linux发行版旁边的“Packages”链接。我直接选择了SuSE 9.2旁边的链接。
- 这将带你到一个页面,列出了许多为该特定Linux发行版编译和打包的不同软件包。
- 在我们安装XSP之前,我们需要安装另外两个预编译包。这些包包含XSP依赖的文件。
- 我们需要安装的第一个包是可以在“数据库”部分找到的“Database Core”包。确切的包名会因你最初选择的软件包链接而异,但总的来说,名称会以“mono-data”开头。我为SuSE 9.2下载的包是http://www.go-mono.com/archive/1.0.5/suse-92-i586/mono-data-1.0.5-1.ximian.10.4.i586.rpm。
- 下载完此文件后,将其打开,它将启动你的发行版的包管理器。此时,只需按照说明安装该软件包。
- 安装“mono-data”包后,现在需要下载“mono-web”包,它将列在“Web Applications, Web Services”部分下。我为SuSE 9.2下载的包是http://www.go-mono.com/archive/1.0.5/suse-92-i586/mono-web-1.0.5-1.ximian.10.4.i586.rpm。
- 接下来,与“mono-data”包一样,只需打开该包并按照说明使用你的发行版的包管理器进行安装。
- 最后,我们准备安装XSP本身。所以,只需回到软件包下载页面的“Web Applications, Web Services”部分,下载“xsp”包。我下载的包是http://www.go-mono.com/archive/1.0.5/suse-92-i586/xsp-1.0.5-1.ximian.10.1.i586.rpm。
- 与前两个包一样,只需将其打开并按照你的包管理器的说明安装XSP。
- 一切顺利的话,你应该已经安装了XSP!
此时,XSP应该已经安装在你的系统上,所以你可以跳转到“运行XSP”部分,该部分概述了如何使用XSP。如果你在从包安装XSP时遇到困难,可以查看下一节“XSP从源代码安装”,这可能会有所帮助。
XSP从源代码安装
如果你按照前一篇文章中的说明从源代码安装了Mono,那么从源代码安装XSP应该是一件轻松的事情。让我们直接开始吧。
- 你需要做的第一件事是下载源代码。再次前往Mono下载页面,地址是http://www.mono-project.com/downloads/index.html[^]。
- 在源代码部分,点击并下载“XSP web server”。我下载了http://www.go-mono.com/archive/1.0.5/xsp-1.0.5.tar.gz。
- 下载完文件后,打开终端继续接下来的步骤。
- 你可以使用命令
tar -xvzf xsp-1.0.5.tar.gz
来解压下载的文件,其中xsp-1.0.5.tar.gz是你下载的文件名。 - 接下来,通过输入
cd xsp-1.0.5
或cd
后面加上你解压文件后得到的目录名(如果与我的不同)来切换到源代码解压到的目录。 - 现在,在我们编译源代码之前,你需要配置make文件。要做到这一点,只需输入
./configure --prefix=/usr
。这需要一些时间。我假设没有出现错误,并且./configure --prefix=/usr
已顺利完成。 - 当
./configure --prefix=/usr
完成后,你就可以继续编译和安装源代码了。 - 要实际编译XSP源代码,你需要运行
make
命令。 - 下一步需要root权限。如果你刚安装了Linux作为独立机器,通常可以通过输入
sudo bash
命令并输入root密码来获得root权限。 - 最后,为了安装(姑且这么说吧),只需运行
make install
命令。这将把编译好的二进制文件、库和其他组件部署到正确的目录。
恭喜。你应该已经成功在你的系统上安装了XSP Web服务器。下一节将介绍如何运行和使用XSP Web服务器。
运行XSP
此时,XSP应该已经安装在你选择的平台上,现在我们将介绍如何启动XSP,以及用于修改服务器默认行为的各种命令行选项。
运行XSP ASP.NET示例
在Linux和Windows上,使用XSP自带的ASP.NET示例来启动XSP非常简单,至少在我使用的XSP 1.0.5版本上是如此。
- 在Windows上启动XSP示例网站
- 只需进入你“开始”菜单的“程序”或“所有程序”中的Mono文件夹。例如,在我机器上的“所有程序”文件夹中的Mono文件夹名为“Mono 1.0.5 for Windows”。
在此文件夹中,进入“XSP”子文件夹,然后点击“XSP Test Web Server”。
- 只需进入你“开始”菜单的“程序”或“所有程序”中的Mono文件夹。例如,在我机器上的“所有程序”文件夹中的Mono文件夹名为“Mono 1.0.5 for Windows”。
- 在Linux上启动XSP示例网站
- 在Linux上以默认设置启动XSP服务器更加简单。只需使用命令
cd /usr/share/doc/xsp/test/
切换到安装ASP.NET示例的目录(这假设你已将XSP安装在/usr
目录)。
现在,要启动XSP并运行ASP.NET示例,只需使用命令xsp
,它将使用默认设置启动XSP。
- 在Linux上以默认设置启动XSP服务器更加简单。只需使用命令
在Windows和Linux上,你应该会在屏幕上看到类似以下的输出:
Listening on port: 8080
Listening on address: 0.0.0.0
Root directory: /usr/share/doc/xsp/test
Hit Return to stop the server.
上面的输出是使用上述步骤在Linux上启动XSP的。你会注意到的与Windows输出的主要区别是,服务器监听的端口很可能是8088,这是Mono在Windows上的安装程序使用的默认端口。你还会注意到,“Root Directory”很可能类似于C:\PROGRA~1\MONO-1~1.5\share\doc\xsp\test。
无论输出如何,如果XSP成功启动,只需打开你的浏览器,将其指向https://:<端口号>,其中<端口号>是输出中“Listening on port:”行末尾列出的端口号。在Linux上,通常使用https://:8080,在Windows上,使用https://:8088。浏览器加载后,你应该会看到一个类似于下图1所示的网页。
图1:Linux上的XSP Web服务器显示ASP.NET示例页面。
图1所示的页面是XSP自带的示例ASP.NET网站的主页。它包含大量ASP.NET Web Forms和ASP.NET Web Services的示例。
XSP,近景。
上面部分的信息展示了如何启动XSP Web服务器附带的示例网站。然而,你很可能希望使用Web服务器来实际托管你自己的Web应用程序和Web Services。为此,我们将介绍可用于修改XSP默认行为的命令行选项。不过,在此之前,我想指出XSP Web服务器本身在Linux和Windows上的位置。
- Windows
- <Mono安装目录>\lib\mono\1.0\xsp.exe
在我的默认Mono安装中,这对应于:C:\Program Files\Mono-1.0.5\lib\mono\1.0\xsp.exe
我建议将目录<Mono安装目录>\lib\mono\1.0\添加到Windows的环境变量路径中,这样你就可以在命令提示符下通过输入xsp.exe
来启动XSP Web服务器。你应该注意到,如果以这种方式启动XSP,你实际上是在.NET运行时上运行它,而不是在Mono运行时上……这是一个Mono与.NET互操作性的好例子。
- <Mono安装目录>\lib\mono\1.0\xsp.exe
- Linux
- <Mono安装目录>/lib/mono/1.0/xsp.exe
在我的安装中,根据上面“Linux上的XSP”部分中的说明,这对应于:/usr/lib/mono/1.0/xsp.exe
请注意,在Linux上,安装还会放置一个脚本<Mono安装目录>/bin/xsp,可以从控制台启动XSP。这是我在上面启动XSP示例网站的部分使用的命令。当你输入并运行控制台中的xsp
时,你实际上是在运行命令mono /usr/lib/mono/1.0/xsp.exe
。
- <Mono安装目录>/lib/mono/1.0/xsp.exe
现在,让我们来看看XSP的命令行选项,或者更确切地说,是xsp.exe的选项。
选项 | |
--port N | N是要监听的TCP端口。 默认值:8080 AppSettings键名:MonoServerPort |
--address addr | addr是要监听的IP地址。 默认值:0.0.0.0 AppSettings键名:MonoServerAddress |
--root rootdir | 服务器在执行任何其他操作之前会切换到此目录。 默认值:当前目录。 AppSettings键名:MonoServerRootDir |
--appconfigfile FILENAME | 从XML配置文件添加应用程序定义。 请参阅服务器附带的示例配置文件。 AppSettings键名:MonoApplicationsConfigFile |
--appconfigdir DIR | 从指定的目录DIR中找到的所有XML文件添加应用程序定义。 文件必须具有“.webapp”扩展名。 AppSettings键名:MonoApplicationsConfigDir |
--applications APPS | 我们要用此服务器管理的应用程序的虚拟目录和实际目录的逗号分隔列表。 虚拟目录和实际目录用冒号分隔。可选地,您可以指定虚拟主机名和端口。 [[hostname:]port:]VPath:realpath,... 示例 /:. 虚拟的/映射到当前目录。 /blog:../myblog 虚拟的/blog映射到../myblog。 myhost.someprovider.net:/blog:../myblog myhost.someprovider.net上的虚拟/blog映射到../myblog。 /:.,/blog:../myblog 处理上面两个类似的应用程序。 默认值:/:。 AppSettings键名:MonoApplications |
--nonstop | 按Enter键不停止服务器。 当服务器没有控制终端时必须使用。 |
--version | 显示版本信息并退出。 |
--verbose | 打印额外消息。 主要用于调试。 |
那么,上面的内容归结为什么?嗯,最简单的解释方法是展示一些示例命令行,所以我们开始吧。
- Windows:
xsp.exe --port 80 --root c:\inetpub\wwwroot\
- Linux:
mono /usr/lib/mono/1.0/xsp.exe --port 80 --root /home/bdelahunty/asp.net/ --applications /:.,/articles:../documents/articles
- Windows:
mono "C:\Program Files\Mono-1.0.5\lib\mono\1.0\xsp.exe" --port 80 --root r:\WebApplications\ --nonstop
在研究了XSP之后,是时候开始让Apache提供ASP.NET页面了。如果你对Apache上的ASP.NET不感兴趣,可以随时跳到“一些示例”部分,在那里我将介绍一个简单的ASP.NET示例。
Apache上的ASP.NET配合mod_mono
Apache是Linux上的首选Web服务器,并且根据netcraft[^],是网络上使用最广泛的Web服务器。这意味着有大量的网站可以托管ASP.NET Web应用程序和ASP.NET Web Services。Mono通过Apache的mod_mono模块来实现这一点,该模块使用XSP,或者更具体地说,它使用mod-mono-server.exe,这是XSP的一个专用版本。
在本节中,我们将介绍如何安装mod_mono以及如何让Apache提供ASP.NET内容。不过,在此之前,我们需要安装Apache。由于本文主要关注如何让Apache提供和托管ASP.NET内容,我将快速介绍一下如何安装Apache。如果你在尝试安装Apache时遇到任何困难,只需在网上搜索关于如何在你的特定Linux发行版上安装Apache的说明。
哦,还有一件事。正如我在“XSP和mod_mono是什么?”部分提到的,mod_mono目前在Windows上的Apache上不起作用,所以我从这里开始只讨论Linux上的Apache。
安装Apache
与Linux上的大多数事物一样,有多种安装应用程序的方法。对于Apache,我将只从源代码安装,因为它可能是安装Apache最简单的方法之一,也是我知道的最独立于发行版的方法。如果你已经安装了Apache 1.3.x或更高版本,则可以跳到“安装和配置mod_mono”部分。所以,让我们开始安装Apache。
- 首先,你需要下载Apache源代码,所以请前往Apache下载页面https://httpd.apache.ac.cn/download.cgi[^]。
- 下载最新版本的Apache Unix源代码。在撰写本文时,最新版本是2.0.53。我下载的文件是http://apache.mirrors.esat.net/httpd/httpd-2.0.53.tar.gz。
- 下载完文件后,打开终端继续接下来的步骤。
- 解压下载的文件。例如,如果你下载了和我一样的文件,并且该文件在你的当前工作目录中,你可以使用命令
tar -xvzf httpd-2.0.53.tar.gz
。 - 接下来,通过输入
cd httpd-2.0.53
或cd
后面加上你解压文件后得到的目录名(如果与我的不同)来切换到源代码解压到的目录。 - 现在,在我们编译源代码之前,你需要配置make文件。要做到这一点,只需输入
./configure --enable-so --prefix=/usr
。 - 当
<CODE>./configure --enable-so --prefix=/usr
完成时,你就可以继续编译和安装源代码了。 - 运行
make
命令来编译Apache。 - 下一步需要root权限才能成功执行。如果你刚安装了Linux作为独立机器,通常可以通过输入
sudo bash
命令并输入root密码来获得root权限。 - 最后,为了安装(姑且这么说吧),只需运行
make install
命令。这将把编译好的二进制文件、库和其他组件部署到正确的目录。
此时,你应该已经安装了Apache。要启动Apache Web服务器,请在控制台中输入httpd
。你可以通过将浏览器指向https:///来检查Apache是否已启动,你应该会看到一个类似于图2所示的网页。
图2:在Linux上运行的Apache Web服务器
现在我们已经安装了Apache,是时候安装mod_mono并配置Apache来托管和提供ASP.NET内容了。
安装和配置mod_mono
好的。我们快完成了。Apache现在应该已经运行起来了,所以我们剩下的工作不多了。我们需要安装mod_mono,然后配置Apache,使其能够将我们想要的请求通过mod_mono模块发送到处理请求的mod-mono-server.exe应用程序。与Apache一样,我将通过源代码来介绍mod_mono的安装。在我们实际安装mod_mono之前,我应该提到有一些安装先决条件。你必须安装Mono,必须安装XSP,并且必须安装Apache。如果你一直按照本文和上一篇文章的步骤操作,那么你的系统应该已经配置好了。
现在,让我们看看能否安装mod_mono。
- 所以,我们再次需要下载一些源代码。前往Mono下载页面http://www.mono-project.com/downloads/index.html[^]。
- 在源代码部分,点击并下载“Apache Mono module”。我下载了http://www.go-mono.com/archive/1.0.5/mod_mono-1.0.5.tar.gz。
- 下载完文件后,打开终端继续接下来的步骤。
- 使用命令
tar -xvzf mod_mono-1.0.5.tar.gz
解压下载的文件,其中mod_mono-1.0.5.tar.gz是你下载的文件名。 - 接下来,通过输入
cd mod_mono-1.0.5
或cd
后面加上你解压文件后得到的目录名(如果与我的不同)来切换到源代码解压到的目录。 - 现在,在我们编译源代码之前,你需要配置make文件。要做到这一点,只需输入
./configure --prefix=/usr
。 - 接下来,要实际编译mod_mono源代码,你需要运行
make
命令。 - 下一步必须使用具有root权限的帐户执行。如果你刚安装了Linux作为独立机器,通常可以通过输入
sudo bash
命令并输入root密码来获得root权限。 - 最后,要安装mod_mono,只需运行
make install
命令。这将把编译好的二进制文件、库和其他组件部署到正确的目录。
这应该是一个轻松的过程。现在你的系统上应该已经安装了mod_mono。还剩什么要做?嗯,我们需要配置Apache来使用mod_mono来处理请求。这意味着我们需要编辑Apache的配置文件。如果你按照“安装Apache”部分的说明安装了Apache,那么Apache配置文件应该是以下文件:/usr/conf/httpd.conf
。
显然,如果你在不同的位置安装了Apache,或者你使用了不同的方法安装,这个文件的位置可能会有所不同。
首先,我们需要配置Apache加载mod_mono模块。为此,我们需要编辑Apache配置文件/usr/conf/httpd.conf,并在末尾添加以下行。
LoadModule mono_module /usr/modules/mod_mono.so
上面一行告诉Apache加载位于/usr/modules/mod_mono.so的模块,作为mono模块。
接下来,我们需要配置Apache来提供一些ASP.NET内容。我们将使用与上面XSP服务器相同的ASP.NET示例。为此,我们需要告诉Apache为给定路径(比如/AspNetOnApache)提供来自/usr/share/doc/xsp/test/目录的内容。这意味着当你浏览到https:///AspNetOnApache时,你将看到/usr/share/doc/xsp/test/目录中的ASP.NET内容。
以下是你需要添加到Apache配置文件中的内容。
Alias /AspNetOnApache "/usr/share/doc/xsp/test"
MonoApplications "/AspNetOnApache:/usr/share/doc/xsp/test"
最后,我们需要告诉Apache使用哪个模块作为请求的处理程序。对于Apache 1.3.x,你可以使用
<Directory /usr/share/doc/xsp/test>
SetHandler mono
<IfModule mod_dir.c>
DirectoryIndex index.aspx
</IfModule>
</Directory>
对于Apache 2.0.x,你可以使用上面的文本,或者使用下面的文本。
<Location /AspNetOnApache>
SetHandler mono
</Location>
最后!我们成功了。只需在控制台中输入命令httpd
来启动Apache。将浏览器指向https:///AspNetOnApache,你应该会看到一个类似于图3所示的页面。
图3:Linux上的Apache Web服务器显示ASP.NET示例页面。
一些示例
经过这一切,你应该能够从Linux机器(运行XSP或Apache)上提供ASP.NET内容(当然也包括Windows上的XSP)。为了更好地完成“体验”,我决定在本篇文章中添加一个基本的Web应用程序示例。
一个简单的Web应用程序示例
我们的简单Web应用程序确实非常简单。它包含一个页面,显示有关托管该页面的机器的基本信息,以及关于请求该页面的基本信息。有两个文件,index.aspx和index.aspx.cs,前者是网页,后者是该页面的代码隐藏文件。所以,打开你最喜欢的文本编辑器或IDE,创建这两个文件(提示:复制粘贴可能是最快的方法)。
index.aspx
<%@ Page language="c#" src="introtomono2/index.aspx.cs"
Inherits="SimpleWebApp.SimplePage" AutoEventWireup="false"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Simple Page</title>
</HEAD>
<body>
<form method="post" runat="server">
<table width="450px" border="1px">
<tr>
<td colspan="2"><strong>Server Details</strong></td>
</tr>
<tr>
<td>Server Name:</td>
<td>
<asp:Label id="serverName" runat="server"></asp:Label></td>
</tr>
<tr>
<td>Operating System:</td>
<td>
<asp:Label id="operatingSystem" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td>Operating System Version:</td>
<td>
<asp:Label id="operatingSystemVersion" runat="server">
</asp:Label>
</td>
</tr>
</table>
<br>
<table width="450px" border="1px">
<tr>
<td colspan="2"><strong>Request Details</strong></td>
</tr>
<tr>
<td>Page Requested:</td>
<td>
<asp:Label id="requestedPage" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td>Request From:</td>
<td>
<asp:Label id="requestIP" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td>User Agent:</td>
<td>
<asp:Label id="requestUA" runat="server"></asp:Label>
</td>
</tr>
</table>
</form>
</body>
</HTML>
index.aspx.cs
using System;
using System.Web.UI.WebControls;
namespace SimpleWebApp
{
public class SimplePage : System.Web.UI.Page
{
protected Label operatingSystem;
protected Label operatingSystemVersion;
protected Label requestedPage;
protected Label requestIP;
protected Label requestUA;
protected Label serverName;
protected override void OnLoad(EventArgs e)
{
DisplayServerDetails();
DisplayRequestDetails();
base.OnLoad (e);
}
private void DisplayServerDetails()
{
serverName.Text = Environment.MachineName;
operatingSystem.Text = Environment.OSVersion.Platform.ToString();
operatingSystemVersion.Text = Environment.OSVersion.Version.ToString();
}
private void DisplayRequestDetails()
{
requestedPage.Text = Request.Url.AbsolutePath;
requestIP.Text = Request.UserHostAddress;
requestUA.Text = Request.UserAgent;
}
}
}
保存好这两个文件后,我们就需要能够提供它们了。我将文件保存在/home/bdelahunty/mono/webappexample/,现在我们需要配置XSP和Apache来从此位置提供页面。由于这是一个简单的Web应用程序示例,我们就称它为SimpleWebApp。
要让XSP提供页面,请在控制台中运行以下命令(将/home/bdelahunty/mono/webappexample/替换为你保存文件的目录)。
xsp --applications /SimpleWebApp:/home/bdelahunty/mono/webappexample/
要让Apache提供页面,只需将以下内容添加到Apache配置文件(在我的例子中是/usr/conf/httpd.conf)的末尾(将/home/bdelahunty/mono/webappexample/替换为你保存文件的目录)。
Alias /SimpleWebApp "/home/bdelahunty/mono/webappexample" MonoApplications "/SimpleWebApp:/home/bdelahunty/mono/webappexample"
如果你使用的是Apache 1.3.x,你还需要添加以下内容。
<Directory /home/bdelahunty/mono/webappexample>
SetHandler mono
<IfModule mod_dir.c>
DirectoryIndex index.aspx
</IfModule>
</Directory>
对于Apache 2.0.x,你可以使用上面的文本,或者使用下面的文本。<Location /SimpleWebApp>
SetHandler mono
</Location>
现在,只需打开你的浏览器,并将其指向Apache的https:///SimpleWebApp或XSP的https://:8080/SimpleWebApp,你应该会看到一个类似于图4所示的页面。
图4:SimplePage.aspx文件显示服务器和请求详细信息。
使用Visual Studio .NET和IIS方式存在的问题?
如果你习惯于使用Visual Studio .NET开发ASP.NET Web应用程序,那么有几件事情需要注意。在创建aspx页面时,Visual Studio .NET在页面的@Page
指令中使用CodeBehind
属性。然而,CodeBehind
实际上并不是一个官方的ASP.NET @Page
指令属性,它只在IDE设计时和编译ASP.NET应用程序为dll时使用。你通常会将编译好的dll放入Web应用程序的bin目录中,IIS会自动识别这些更改。这在XSP或mod_mono上不起作用;你不能仅仅放入一个新的预编译dll,Web服务器就会开始使用它。
你可能已经注意到,在上面的简单示例中,我在@Page
指令中使用了Src
属性,并且没有提供关于将Web应用程序预编译为需要部署的dll的详细信息。我只是将XSP和Apache指向存储index.aspx和index.aspx.cs文件的目录,Web服务器会在首次调用页面时处理Web应用程序的编译。这是你可以解决无法直接插入新的预编译dll的伪问题的一种方法。你可以直接插入一个新的.cs代码隐藏文件,Web服务器会在运行时编译它。然而,这种方法要求你的所有代码隐藏文件都位于服务器上。如果你正确设置了权限,这不是问题;如果你没有,那将是一个大问题,因为你的网站的任何访问者都可能查看你网站背后的代码,并可能找到破解它的方法。
如果你习惯于Visual Studio .NET和IIS的方式,或者你只是使用Visual Studio .NET来构建你的Web应用程序,并想直接将预编译的dll放入bin目录,那么你可以通过部署新dll然后重启Web服务器来快速解决这个问题。在将新dll放入后,使用httpd -k restart
来重启Apache,如果你使用XSP,只需关闭然后重启XSP即可。
下一步?
好了,希望这篇文章能帮助你在运行XSP或Apache的Linux机器上(当然也包括Windows上的XSP)提供ASP.NET页面,并为你提供使用XSP和mod_mono的基本概述。这个“Mono入门”系列的下一篇文章将要么介绍如何使用CVS随时获取最新版本的Mono,要么介绍如何使用Mono开发GUI应用程序。
注意
撰写本文时,Mono的最新稳定版本是1.0.5。然而,在发布本文时,最新稳定版本是1.0.6。
链接
- Mono主页 - http://www.mono-project.com/
- Mono下载页面 - http://www.mono-project.com/downloads/index.html
- ECMA C#语言规范 - http://www.ecma-international.org/publications/standards/Ecma-334.htm
- ECMA通用语言基础设施 (CLI) - http://www.ecma-international.org/publications/standards/Ecma-335.htm
- Microsoft ECMA/ISO标准化页面 http://msdn.microsoft.com/net/ecma/
历史
2005年3月3日 - 首次发布。