zoukankan      html  css  js  c++  java
  • 艾伟_转载:在Mono中创建ASP.NET程序 狼人:

    一只可爱的猴子:

    一次偶然的机会碰到这只猴子,并在工作中也用到它了。现将自己的使用经验分享与此(以OpenSUSE为例介绍)。

    对于不熟悉Mono的朋友来说,Mono就是.Net在Linux和其它操作系统上的实现(Unix、Mac、iphone、Windows...)。Mono的官方网站是:http://www.mono-project.com

    严格来讲,Mono是一个开源的、跨平台的C#语言和其CLR的实现,并与微软的.NET二进制兼容。很绕口吧,这是Mono官方网站写的:An open source, cross-platform, implementation of C# and the CLR that is binary compatible with Microsoft.NET。

    Mono最新的版本是Mono 2.6, MonoDevelop最新的版本是MonoDevelop 2.2

    说到Mono,不能不提Miguel De Icaza,这位大牛是Mono项目的发起者,此人也是GNome的创始人之一,并创建了Ximian公司,此公司连同Mono后被Novell公司收购,并担任Novell公司开发者平台副总裁,这是这位大牛的博客http://tirania.org/blog/ 。Novell公司是Mono的赞助者和主推者,并在其桌面版Linux OpenSUSE将Mono作为默认配置,更要命的是,Novell也将Mono作为其服务器版Linux Enterprise的默认配置,由此可见Novell的雄心勃勃。

    只谈Mono似乎是不够的,和.NET一样,Mono也有与Visual Studio一样强大的集成开发环境IDE

    MonoDevelop。MonoDevelop大大的提升了开发效率,这也是选择Mono的主要原因。

    根据我的想法,现在总结一下Mono的使用场合:

    1. 与其它语言相比更熟悉.NET或热爱.NET,且需要在Linux做开发(我就是属于这种情况^_^)

    2. 节省开发成本,因为光Visual Studio就比Windows卖的还贵,而且价格还要受License限制,当然,盗版猖獗的中国大陆,开发似乎是零成本,可以说没几个公司用的是正版的Visual Studio开发。这也是Mono在中国不被看重的原因,大家都只是因为新奇而对Mono闲聊一番。

    3. 移植Windows上的.NET程序到Linux上

    也许有人担心Mono的稳定性,其实国外已有很多Mono开发的应用,具体可以参考http://www.mono-project.com/Companies_Using_Mono,这里不仅有小的桌面工具,也有服务器级的应用。

    也有人担心Mono的版权问题,由于C#已经是国际标准,问题主要集中在ADO.NET和WinForm上。目前微软是与Novell在Mono上进行着合作,但不能保证将来微软的威胁。当然,Novell也有自己的措施来处理。比如,采用GTK#编写GUI程序。但微软也提出了一项“Community Promise”的专利许可,并与2009年7月6日正式apply(不知道怎么翻译),其针对ECMA C# 和 ECMA CLI standards。具体参考http://www.mono-project.com/news/archive/2009/Jul-06-1.htmlhttp://www.microsoft.com/interop/cp/default.mspx

    当然,Mono也包含ASP.NET,因为Windows带有Web服务器IIS,Mono也自带一个叫XSP轻量级的Web服务器,XSP也是用100%纯C#实现的。我认为XSP主要用在实验室或小型网站,其最大的优点是能在MonoDevelop中进行调试。若做商用的网站或Web服务,可以考虑Apache+mod_mono方式,mod_mono是为Mono的ASP.NET开发的用于Apache上的模块,其功能类似IIS中的wp_aspnet。

    Mono帮助文档:由于Mono中文资料比较少

    对于Mono开发过程中遇到问题,可以查看Mono的在线文档http://mono-project.com/Start,或者去Mono Forum发帖http://go-mono.com/forums/(先google一番,因为自己遇到的问题别人已经遇到过)

    若在Linux中使用Mono,可以采用在本地(Windows)安装Linux虚拟机或者使用XManager远程到Linux服务器2中方式。

    1-在本地安装Linux虚拟机 :

    安装VmWare WorkStation

    下载地址:http://www.vmware.com/cn/

    也可以下载含有Mono的虚拟机镜像文件http://www.go-mono.com/mono-downloads/download.html,这样就可以直接安装免费的VM Player就可以了,不用再创建并安装虚拟机了。

    安装虚拟机前,需要进入BIOS,设置VIRTULIZATION 为ENABLED

    2-如果Linux服务器在远程的话,需在本地安装Xmanager 并在远程Linux上配置XManager,在Linux上配置Xmanager如下所示:

    1) 修改运行级别为5,可先运行runlevel命令,如果输出 N 5就不用改了,若不是,修改/etc/inittab,改变runlevel为5,例如

    [root@sys]# cat /etc/inittab

    id:5:initdefault:

    2) 编辑/etc/X11/xdm/Xaccess,去掉这一行的注释:

    # * #any host can get a login window

    改为

    * #any host can get a login window

    3)编辑/etc/X11/xdm/xdm-config,注释掉这一行:在displayManager.requestPort:0前面加上一个!号,结果如下

    DisplayManager.requestPort: 0

    !DisplayManager.requestPort: 0

    4)编辑/etc/opt/gnome/gdm/gdm.conf,在[xdmcp]部分,修改Enable为true,

    [xdmcp]
    Enable=0(或false)

    改为

    [xdmcp]
    Enable=1(或true)

    取消这一行的注释:

    #Port=177

    改为

    Port=177

    5)编辑/etc/sysconfig/displaymanager,有两个相关变量:DISPLAYMANAGER_REMOTE_ACCESS和DISPLAYMANAGER_ROOT_LOGIN_REMOTE,根据自己的需要进行修改。

    6) 最后,如果我们的Linux机器配置有防火墙,为防止防火墙将通过177端口(即xdmcp服务)的数据过虑,我们必须加上如下的规则:

    iptables -A INPUT -p udp -s 0/0 -d 0/0 --dport 177 -j ACCEPT

    7) rcxdm restart

    本地xmanager的设置:

    1,运行xbrowser。

    2,new一个新的session

    3,选择XDMCP

    4,Method中根据自己与主机所处网络类型设置,比如是否是局域网等等

    如果自己与主机不在同一网段,Method设置为XDM Query

    host中写入linux服务器的ip地址port默认177

    5,next->next->finish

    如果连接不上,请输入命令 netstat –ln | grep 177,查看177端口是否处于监听状态。

     

    安装Mono

    由于OpenSUSE或SUSE Enterprise默认安装了某一版本的Mono,如果想要用最新版本Mono的话,不需卸载以前的版本,直接安装新版本的Mono即可。

     

    安装Mono可以采用以下2种方式:

    1-用YAST在线升级,这种方式适合电脑连接到Internet上。

    打开YAST->软件管理,选择所有和Mono有关的安装包,进行安装。

    若采用其它安装源,则打开YAST->安装源,添加新的安装源。

     

     

    2-下载rpm包到本地然后升级

    首先到http://ftp.novell.com/pub/mono/download-stable/SLE_11/下载所需要的版本和文件的rpm包到本地目录mono_full中。

     

    安装mono_full中的文件,步骤如下:

    1. 打开YAST

    2. 打开“安装源”

     

    1. 点击“添加”,选择“包目录”,浏览到mono_full目录的地址(包括mono_full),若弹出窗口,点击“继续”

     

    1. 不要选择“与Zenworks同步更改”,即把“叉”去掉

    2. 点击“完成”

    3. 打开“软件管理”

    4. 在左上角的“过滤器”中选择“安装源”

    5. 在下面的窗口中选择刚才创建的安装源

     

    1. 选择菜单“软件包”->“此列表中的全部内容”->“安装”

    2. 选择右下角的“接受”

    在弹出的窗口中在各项均选择“仅在此忽略此需求”

     

     

    点击“确定”,在弹出的窗口中点击“继续”

     

     

     

    安装完成后,可以打开MonoDevelop看看成果。^_^

     

    Mono的组成文件

    下面介绍一下Mono各个模块在Linux中的路径,包括GAC文件夹:

    Mono运行时环境runtime

    /usr/lib/mono/1.0

    /usr/lib/mono/2.0

    /usr/lib/libmono.so

    /usr/lib/libmono.so.0.0.0

    /usr/lib/libmono.so.0

    /usr/bin/mono

    /usr/bin/mono32

    /usr/bin/mono-find-provides

    /usr/bin/mono-find-requires

    Mono编译环境

    /usr/bin/mcs

    /usr/bin/gmcs

    /usr/lib/mono/1.0/mcs.exe

    /usr/lib/mono/1.0/mcs.exe.config

    /usr/lib/mono/2.0/gmcs.exe

    /usr/lib/mono/2.0/gmcs.exe.config

    /usr/share/doc/packages/sensors/chips/bmcsensors

    /usr/share/man/man1/mcs.1.gz

    /usr/share/vim/vim64/print/dec-mcs.ps

    Mono配置文件

    /etc/mono/1.0/machine.config

    /etc/mono/2.0/machine.config

    Mono GAC文件

    /usr/lib/mono/gac/

    MonoDevelop安装路径

    /usr/lib/monodevelop/

     

    安装apache2和mod_mono

    与安装Mono一样,将apache2和apache2-mod_mono安装上。

     

    开发ASP.NET或Web Serives程序

    打开MonoDevelop,新建一个ASP.NET程序,并报存在/home/mazhi/cmd目录下

    配置apache2

    打开apache2的config文件:/etc/apache2/httpd.conf,在里面加上以下行:

    Include /etc/apache2/mod_mono.conf

    并添加以下行:

    Alias /website /home/mazhi/cmd

    MonoApplicationsConfigFile website /home/mazhi/cmd/website.webapp

    MonoServerPath website "/usr/local/bin/mod-mono-server2"

     

    Allow from all

    Order allow,deny

    SetHandler mono

    MonoSetServerAlias website

     

     

    具体配置请参考http://www.mono-project.com/Mod_mono

     

    启动Apache服务

    sudo /sbin/service apache2 restart

     

    注意:在apache部署asp.net程序时,asp.net程序的所有层次的文件夹和文件的other权限都必须配置Execute权限,例如将/home/mazhi/cmd所有层次的文件夹和文件的other权限都配置Execute权限

    另外,如果在程序中使用log4net的时候,将包含log文件的所有层次的文件夹的other权限配置write权限

     

    访问Oracle数据库的问题

     

    如果ASP.NET程序访问Oracle数据库,存在以下2种可能的情况,1是ASP.NET与Oracle安装在同一台机器上,2是ASP.NET与Oracle安装在不同的机器上。如果是第2种情况,则需要安装 instantclient的Oracle数据库访问组件。在Oracle的官方网站下载basic-11.1.0.70-linux-x86_64.zip或oracle-instantclient11.1-basic-11.1.0.7.0-1.x86_64.rpm进行安装。例如安装在/opt/oracle/目录中。

    添加Oracle数据连接库文件

    安装后,/opt/oracle/oradb/home/lib 存放Basic和sqlplus的各种库文件,在/etc/ld.so.conf文件中添加路径/opt/oracle/oradb/home/lib,还有就是在此目录下为libclntsh.so.11.1库文件建个软连接

    ln -s libclntsh.so.11.1 libclntsh.so

    让代码连接动态库的时候能找到库文件。再执行ldconfig命令

     

    配置Oracle数据库环境变量

    系统级配置在/etc/profile文件中

    用户级配置在/root/.bash_profile或/home/someuser/.bash_profile文件中

    根据需要,在以上2个文件中的1个文件中添加以下行:

    ORACLE_BASE=/opt/oracle/oradb; export ORACLE_BASE

    ORACLE_HOME=$ORACLE_BASE/home;export ORACLE_HOME

    ORACLE_SID=imapdb;export ORACLE_SID

    NLS_LANG=American_america.zhs16gbk;export NLS_LANG

    PATH=$ORACLE_HOME/bin:$PATH;export PATH

    TMP=/opt/oracle/tmp

    TMPDIR=/opt/oracle/tmp

    export TMP TMPDIR

    umask 022

     

    解决连接Oracle数据库出现Could not allocate the Oracle environment错误

    Mono ASPX链接Oracle数据库出错“Could not allocate the Oracle environment“

    修改mod-mono-server的脚本文件,用gedit打开/usr/bin/mod-mono-server2文件,添加以下行:

    ORACLE_BASE=/opt/oracle

    ORACLE_HOME=$ORACLE_BASE/9.2

    NLS_LANG=POLISH_POLAND.EE8MSWIN1250

    LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

    LIBPATH=$ORACLE_HOME/lib

    LD_LIBRARY_PATH_32=$ORACLE_HOME/lib32

    PATH=$PATH:$ORACLE_HOME/bin

    LD_ASSUME_KERNEL=2.4.19

    LANG=pl_PL.iso88592

    export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH LD_LIBRARY_PATH_32 PATH LD_ASSUME_KERNEL NLS_LANG LIBPATH

    LANG

    before line

    exec /usr/local/bin/mono $MONO_OPTIONS "/usr/local/lib/mono/2.0/mod-mono-server2.exe" "$@"

     

    这样就可以连接到Oracle数据库了。

     

    (全文完)

  • 相关阅读:
    【Java EE 学习 81】【CXF框架】【CXF整合Spring】
    【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
    【Java EE 学习 80 上】【WebService】
    【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
    【Java EE 学习 79 上】【mybatis 基本使用方法】
    【Java EE 学习 78 下】【数据采集系统第十天】【数据采集系统完成】
    【Java EE 学习 78 中】【数据采集系统第十天】【Spring远程调用】
    【Java EE 学习 78 上】【数据采集系统第十天】【Service使用Spring缓存模块】
    【Java EE 学习 77 下】【数据采集系统第九天】【使用spring实现答案水平分库】【未解决问题:分库查询问题】
    【Java EE 学习 77 上】【数据采集系统第九天】【通过AOP实现日志管理】【通过Spring石英调度动态生成日志表】【日志分表和查询】
  • 原文地址:https://www.cnblogs.com/waw/p/2157020.html
Copyright © 2011-2022 走看看