Mono经过这么多年的发展,已经相当成熟并且强大。最新的Mono 2.10已经开始支持ASP.Net MVC 3。 今天试了一下在openSUSE中安装Mono做一下测试。之所以选择openSUSE而没有用Ubuntu或CentOS等是因为openSUSE和Mono的渊源更深些。整个过程安装得很顺利,花了我下午一个多小时来安装和解决问题。
1. 环境:
我是在虚拟机中运行openSUSE 11.3的,宿主机是Window 7,使用桥接模式所以可以把openSUSE当成服务器(Web, Database, SVN...)来用。
使用的日本的源,速度还可以。附在这里,给有需要的同学。
http://ftp.novell.co.jp/pub/opensuse/update/11.3/
http://ftp.novell.co.jp/pub/opensuse/distribution/11.3/repo/oss/
http://ftp.novell.co.jp/pub/opensuse/distribution/11.3/repo/non-oss/
2. 安装Mono
在Mono的官网上可以查到在openSUSE上安装最新版Mono的方法。使用zypper的确很方便。如果用的是别的Linux发布版,请参照安装指南。
取得root权限后执行下面的操作。
zypper addrepo http://ftp.novell.com/pub/mono/download-stable/openSUSE_11.3 mono-stable
zypper refresh --repo mono-stable
zypper dist-upgrade --repo mono-stable
安装mod_mono,会一并安装Apache, XSP和Mono.安装完成后可以查看所安装的版本。
zypper install mod_mono
mono -V
3. 配置Mono
使用Configure Apache Mod_Mono (http://go-mono.com/config-mod-mono) 来配置Mono确实很方便。主要是配置Server Name和Path to Document Root。配置完成后生成conf文件,把它放置在/etc/apache2/conf.d目录下就可以了.
请确保Apache2服务是开启的(chkconfig --list来查看)。开启可以用如下命令:
service apache2 restart
配置成开机自动启动,则更好:
chkconfig --level 2345 apache2 on
4. 配置防火墙
这时我们可以写一个最基本的html文件,放在指定的Apache目录(就是上一步配置的Path to Document Root目录)下.
在openSUSE的环境下打下Firefox浏览 http://localhost/xx.html,应该可以呈现出正确的html页面。
但是如果到外面Windows 7的环境下打开http://ip/xx.html, 会显示错误。这是因为openSUSE默认防火墙开启的原因。你到openSUSE下把防火墙关了再试,应该就可以了。当然,更好的做法是开启HTTP SERVER.
运行Yast, 选择Security and Users,打开Firewall设置。在Interfaces里把etho设置成External Zone, 并把External Zone设成Allowed. 然后到Service to Allow里面,把HTTP Server加进去,一般Secure Shell Server也要加进去。
再到Windows 7的环境下去试一下,应该可以打开网页了。
5. 发布ASP.NET程序
刚刚我们只是测试了最基本的html文件。我们可以测试一下ASP.Net程序。
到Windows 7环境下,编译好web程序并得到发布包。把所有文件复制到openSUSE Apache的目录下去试一下。很遗憾,我遇到了以下的错误:
System.IO.FileLoadException: Could not load file or assembly ‘System.IdentityModel, Version=3.0.0.0 ...
找了资料,说是缺少wcf的组件。通过安装mono-wcf解决。
zypper install mono-wcf
我测试了Framework 2.0和3.x的web程序,都没有任何问题 (可以先用MoMA工具来检查是否有不支持的代码)。只是在测试4.0的程序时,遇到错误说TargetFramework不是可识别的attribute,到web.config中把它删除掉就可以了。
我还试着测试一下Asp.net MVC 3的程序,不过没有成功。这个留等下次来试。
总的来说,让ASP.Net在Linux上跑起来还能支持到.Net 4.0,已经很不错了。期待Mono的3.0版本。