Linux操作系统中运行ASP.NET 4

开发 后端
我们之前已经讨论过在openSUSE 11.3 操作系统配置ASP.NET 4开发环境的问题了,下面将更详细的介绍后续步骤。

在openSUSE下ASP.NET 4开发环境配置》中已经配置好了 openSUSE 11.3 操作系统。

现在,我们进入“GNOME 终端”,使用 ifconfig 命令验证一下本虚拟的 IP 地址就是一开始我们在宽带路由器中为它分配的静态地址。

ben@linux-nyhn:~> /sbin/ifconfig  
eth0      Link encap:Ethernet  HWaddr 08:00:27:51:5B:0B    
          inet addr:192.168.1.251  Bcast:192.168.1.255  Mask:255.255.255.0  
          inet6 addr: fe80::a00:27ff:fe51:5b0b/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:853 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:807 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:1000   
          RX bytes:853227 (833.2 Kb)  TX bytes:90376 (88.2 Kb)  
 
lo        Link encap:Local Loopback    
          inet addr:127.0.0.1  Mask:255.0.0.0  
          inet6 addr: ::1/128 Scope:Host  
          UP LOOPBACK RUNNING  MTU:16436  Metric:1  
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0   
          RX bytes:1300 (1.2 Kb)  TX bytes:1300 (1.2 Kb)  
 
ben@linux-nyhn:~> sudo vim /etc/hosts 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

如上所示,再使用 vim 编辑器编辑 /etc/hosts 文件,增加一个域名 ben.skyiv.com,如下图所示:

注意上图中的 IP 地址必须是 127.0.0.1,而不能是 192.168.1.251。在宿主机的 Windows Vista 操作系统中以管理员身份进入命令提示符,使用记事本编辑 C:\Windows\System32\drivers\etc\hosts 文件,增加一个同样的域名 ben.skyiv.com,注意此时 IP 地址必须是 192.168.1.251,而不能是 127.0.0.1,如下图所示:

我们的 openSUSE 11.3 操作系统已经安装好了 apache 软件,但尚未启用,如下所示:

ben@linux-nyhn:~> sudo /sbin/service apache2 status  
Checking for httpd2:                                              unused 
  • 1.
  • 2.

那么,现在,让我们设置 apache 为开机随系统启动,并且现在就启动它吧:

ben@linux-nyhn:~> sudo /sbin/chkconfig -add apache2  
apache2                   0:off  1:off  2:off  3:on   4:off  5:on   6:off  
ben@linux-nyhn:~> sudo /sbin/service apache2 start  
Starting httpd2 (prefork)                                            done  
ben@linux-nyhn:~> sudo /sbin/service apache2 status  
Checking for httpd2:                                              running 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

现在让我们在宿主机的 Windows Vista 操作系统的谷歌浏览器中打开 ben.skyiv.com 网站试试看吧:

如上图所示,我们的 Apache 2.2.15 已经正常工作在 Linux/SUSE 操作系统上了。只不过现在该网站还没有内容而已。

在 openSUSE 操作系统中,Apache 的默认文档是放在 /srv/www/htdocs 目录下的。

openSUSE 操作系统已经为每个用户建立了 public_html 目录,例如我的用户就是 /home/ben/public_html 目录,用以放置该用户的网站的内容。可以通过 ben.skyiv.com/~ben 访问,这里 ben 是我的用户名,如下图所示:

从上图中可以看出,这个目录是空的,需要用户自己放里放东东。那么,我们就编写如下一个 index.html 吧:

ben@linux-nyhn:~> cd public_html  
ben@linux-nyhn:~/public_html> vim index.html 
  • 1.
  • 2.

再次在 Windows Vista 操作系统中访问 ben.skyiv.com/~ben 网页:

现在让我们来看看 mono 的版本:

ben@linux-nyhn:~> mono --version  
Mono JIT compiler version 2.6.4 (tarball Mon Jul  5 13:53:45 UTC 2010)  
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com  
    TLS:           __thread  
    GC:            Included Boehm (with typed GC and Parallel Mark)  
    SIGSEGV:       altstack  
    Notifications: epoll  
    Architecture:  amd64  
    Disabled:      none  
ben@linux-nyhn:~>   
ben@linux-nyhn:~> gmcs --version  
Mono C# compiler version 2.6.4.0 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

这个 mono 2.6.4 的版本太低了。根据 mono 官方下载页面的指示,按如下步骤进行升级:

ben@linux-nyhn:~> sudo zypper addrepo http://ftp.novell.com/pub/mono/download-stable/openSUSE_11.3 mono-stable  
正在添加安装源 'mono-stable' [done]  
Repository 'mono-stable' successfully added  
Enabled: Yes  
Autorefresh: No  
URI: http://ftp.novell.com/pub/mono/download-stable/openSUSE_11.3  
 
ben@linux-nyhn:~> sudo zypper refresh --repo mono-stable  
Retrieving repository 'mono-stable' metadata [done]  
正在构建 'mono-stable' 安装源缓存 [done]  
Specified repositories have been refreshed.  
ben@linux-nyhn:~> zypper dist-upgrade --repo mono-stable 
=================> 在这里进行漫长的升级 <=================  
ben@linux-nyhn:~>  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

升级完成,再次查看 mono 的版本:

ben@linux-nyhn:~> mono --version  
Mono JIT compiler version 2.8.1 (tarball Fri Nov 12 14:37:21 UTC 2010)  
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com  
    TLS:           __thread  
    SIGSEGV:       altstack  
    Notifications: epoll  
    Architecture:  amd64  
    Disabled:      none  
    Misc:          debugger softdebug   
    LLVM:          yes(2.8svn-mono)  
    GC:            Included Boehm (with typed GC and Parallel Mark)  
ben@linux-nyhn:~> dmcs --version  
Mono C# compiler version 2.8.1.0 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

果然已经升级到最新的 mono 2.8.1 版本了。

Apache mod_mono configuration tool 网页可以生成运行 ASP.NET 所需要的 Apache 软件的配置文件,如下图所示:

生成的 ben.skyiv.com.conf 文件如下所示:

<virtualhost *:80> 
  ServerName ben.skyiv.com  
  DocumentRoot /home/ben/www  
  # MonoServerPath can be changed to specify which version of ASP.NET is hosted  
  # mod-mono-server1 = ASP.NET 1.1 / mod-mono-server2 = ASP.NET 2.0  
  # For SUSE Linux Enterprise Mono Extension, uncomment the line below:  
  # MonoServerPath ben.skyiv.com "/opt/novell/mono/bin/mod-mono-server2"  
  # For Mono on openSUSE, uncomment the line below instead:  
  MonoServerPath ben.skyiv.com "/usr/bin/mod-mono-server2"  
 
  # To obtain line numbers in stack traces you need to do two things:   
  # 1) Enable Debug code generation in your page by using the Debug="true"   
  #    page directive, or by setting  in the   
  #    application's Web.config  
  # 2) Uncomment the MonoDebug true directive below to enable mod_mono debugging  
  MonoDebug ben.skyiv.com true  
    
  # The MONO_IOMAP environment variable can be configured to provide platform abstraction  
  # for file access in Linux.  Valid values for MONO_IOMAP are:  
  #    case  
  #    drive  
  #    all  
  # Uncomment the line below to alter file access behavior for the configured application  
  MonoSetEnv ben.skyiv.com MONO_IOMAP=all 
  #  
  # Additional environtment variables can be set for this server instance using   
  # the MonoSetEnv directive.  MonoSetEnv takes a string of 'name=value' pairs   
  # separated by semicolons.  For instance, to enable platform abstraction *and*   
  # use Mono's old regular expression interpreter (which is slower, but has a  
  # shorter setup time), uncomment the line below instead:  
  # MonoSetEnv ben.skyiv.com MONO_IOMAP=all;MONO_OLD_RX=1 
 
  MonoApplications ben.skyiv.com "/:/home/ben/www"  
  <location "/"> 
    Allow from all  
    Order allow,deny  
    MonoSetServerAlias ben.skyiv.com  
    SetHandler mono  
    SetOutputFilter DEFLATE  
    SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary  
  </location> 
  <ifmodule mod_deflate.c> 
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript  
  </ifmodule> 
</virtualhost> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.

这个 ben.skyiv.com.conf 文件需要放在 /etc/apache2/conf.d 目录下:

ben@ben:~> ll /etc/apache2/conf.d  
总计 8  
-rw-r--r-- 1 ben  users 2037 01-04 01:21 ben.skyiv.com.conf  
-rw-r--r-- 1 root root  1239 10-01 02:12 mod_mono.conf 
  • 1.
  • 2.
  • 3.
  • 4.

然后创建 /home/ben/www 目录,并重启 Apache 服务:

ben@ben:~> mkdir www  
ben@ben:~> sudo /etc/init.d/apache2 restart  
Syntax OK  
Shutting down httpd2 (waiting for all children to terminate)      done  
Starting httpd2 (prefork)                                         done  
ben@ben:~>  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

现在让我们建立一个网站:

ben@ben:~> cd www  
ben@ben:~/www> vim index.html 
  • 1.
  • 2.

在 openSUSE 11.3 操作系统中访问 ben.skyiv.com 网站,如下图所示:

点击上图中的“服务器信息”,出现“The resource cannot be found”错误:

这是预料之中的,因为我们还没有编写 info.aspx 文件呢。从上图中可以看出,ASP.NET 是 2.0 版的。

现在,我们修改 /etc/apache2/conf.d/ben.skyiv.com.conf 文件,如下所示:

ben@ben:~/www> sudo vim /etc/apache2/conf.d/ben.skyiv.com.conf 
  • 1.

如上图所示,将 mod-mono-server2 改为 mod-mono-server4 。然后重启 Apache 服务:

ben@ben:~> sudo /etc/init.d/apache2 restart  
Syntax OK  
Shutting down httpd2 (waiting for all children to terminate)      done  
Starting httpd2 (prefork)                                         done  
ben@ben:~>  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

然后重新访问 ben.skyiv.com/aspx/info.aspx 网页:

 

从上图中可以看出,已经运行在 ASP.NET 4 了。

 

现在,让我们来编写 info.aspx 程序吧:

ben@linux-nyhn:~/www> mkdir aspx src bin  
ben@linux-nyhn:~/www> vim aspx/info.aspx  
ben@linux-nyhn:~/www> vim src/info.aspx.cs  
ben@linux-nyhn:~/www> vim src/info.rsp 
  • 1.
  • 2.
  • 3.
  • 4.

网页文件 aspx/info.aspx 的内容如下所示:

 <%@ Page Language="C#" inherits="Skyiv.Ben.Web.InfoPage" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
 <html xmlns="http://www.w3.org/1999/xhtml" > 
 <head runat="server"> 
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   
  <title>服务器信息</title> 
</head> 
<body> 
 <form id="form1" runat="server"> 
  <a href="http://ben.skyiv.com">返回</a> 
 <hr /> 
 <asp:GridView id="dgMain" runat="Server" > 
 <AlternatingRowStyle BackColor="#FFFFCD" /> 
     <HeaderStyle BackColor="#AAAADD" /> 
   </asp:GridView> 
   </form> 
 </body> 
 </html> 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

对应的 C# 源程序 src/info.aspx.cs 的内容如下所示:

using System;  
using System.Data;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
 
 namespace Skyiv.Ben.Web  
 {  
  public class InfoPage : Page  
 {  
 protected GridView dgMain;  
   public void Page_Load(object sender, EventArgs e)  
   {  
     if (IsPostBack) return;  
      dgMain.DataSource = GetInfo();  
      dgMain.DataBind();  
     }  
   DataTable GetInfo()  
     {  
      DataTable dt = new DataTable();  
      dt.Columns.Add("项目"typeof(string));  
       dt.Columns.Add("内容"typeof(string));  
     AddRow(dt, "操作系统", Environment.OSVersion);  
     AddRow(dt, "公共语言运行库", Environment.Version);  
      return dt;  
     }  
    void AddRow(DataTable dt, string name, object value)  
   {  
     DataRow dr = dt.NewRow();  
     dr[0] = name;  
     dr[1] = value.ToString();  
    dt.Rows.Add(dr);  
    }  
   }  
  } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.

编译响应文件 src/info.rsp 的内容如下所示:

-out:../bin/info.dll  
-t:library  
-r:System.Data  
-r:System.Web  
info.aspx.cs 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

然后就是使用以下命令进行编译了:

ben@linux-nyhn:~/www> cd src  
ben@linux-nyhn:~/www/src> dmcs @info.rsp 
  • 1.
  • 2.

编译完成,网站的运行效果如下图所示:

至此,我们成功地在 Linux 操作系统中运行 ASP.NET 4。

原文链接:http://www.cnblogs.com/skyivben/archive/2011/01/04/1925385.html

  1. 详解ASP.NET MVC 3 beta新特性
  2. ASP.NET MVC 3让依赖注入实现得更简单
  3. 详解ASP.NET MVC 3 beta新特性
  4. ASP.NET MVC 3新特性与NuPack功能详解
  5. .NET开发人员应该关注的七个开源项目

 

责任编辑:彭凡 来源: 博客园
相关推荐

2009-07-30 13:28:55

ASP.NET中的ja

2010-01-08 11:04:06

ASP.NET 4SEO

2009-08-05 17:54:04

ASP.NET运行模式

2009-07-28 17:02:10

ASP.NET运行环境

2009-10-26 15:55:43

URL Routing

2011-11-22 09:32:39

ASP.NET

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-12-22 16:23:12

Linux操作系统

2009-07-22 17:45:35

ASP.NET教程

2009-07-24 10:10:22

ASP.NET

2009-07-24 16:17:42

WebRequestEASP.NET

2009-08-04 12:29:57

ViewState概念ASP.NET

2009-07-21 11:11:44

删除CookieASP.NET

2009-07-27 09:31:06

定义JavaScripASP.NET

2009-07-27 15:25:40

aspx页面ASP.NET

2009-07-22 16:34:36

使用T4ASP.NET MVC

2010-06-25 08:51:46

ASP.NET MVC

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入门教程

2009-08-10 13:32:15

ASP.NET TimASP.NET组件设计
点赞
收藏

51CTO技术栈公众号