备忘录

记录点滴技术

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

虚拟机centos7.9配置apache+mono运行asp.net网站程序总结

经过这段时间的反复安装测试,现在总结一下,也对个别地方进行了优化

1、更换yum源

sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.cloud.tencent.com/repo/centos7_base.repo
sudo yum clean all
sudo yum makecache

2、安装mono,用mono源码编译的时间比较长,改用epel-release 仓库进行安装

sudo yum install -y epel-release
sudo yum install -y mono-complete

安装完成看了一下,mono的版本号是6.8.0.123,或者参考——CentOS 7.2下安装Mono 5.0

__________________________________________________________________________________________________________________________________________________________________

第一阶段:

3、安装xsp-4.7.1

需要把Mono.Security.dll,Mono.Posix.dll,Mono.Data.Sqlite.dll拷贝到/usr/lib/mono/4.0-api目录下,dmcs文件拷贝到/usr/bin目录下并授权执行(mono2.11起,都是用mcs作为编译器,gmcs和dmcs只是通过不同参数调用mcs的,4.0版本起没有gmcs,压缩包的gmcs和dmcs来自mono-3.12.1版本,三个dll文件来自Ubuntu24.04下面的mono 6.12.0.200版本4.0-api目录)所需文件下载

下载并编译安装xsp4

wget https://download.mono-project.com/sources/xsp/xsp-4.7.1.tar.gz
sudo tar -xzf xsp-4.7.1.tar.gz
sudo ./configure --prefix=/usr 
sudo make ; sudo make install

这里由于是用仓库安装的mono,mono.pc文件是存放到/usr/lib64/pkgconfig目录下,就不会出现缺少mono模块的提示;如果是用源码安装,还需要拷贝/usr/lib/pkgconfig/mono.pc文件到/usr/lib64/pkgconfig目录下。

安装完成后,运行xsp已经可以访问aspx页面了,如果仅仅是开发调试aspx页面,到这里应该也够用了。

如果aspx页面要调用oracle客户端连接oracle数据库,还要进行如下的配置:

(1)运行netmgr配置监听程序和服务命名

(2)在.bash_profile文件中配置NLS_LANG,避免aspx页面读取数据库的中文字符出现乱码

如果出现system.dllnotfoundexception:libclntsh.so的错误提示,还需要配置export LD_LIBRARY_PATH,指向oracle安装目录的lib,例如:

sudo vi .bash_profile

export ORACLE_BASE=/home/wen/app/wen
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=orcl
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$PATH:$ORACLE_HOME/bin


__________________________________________________________________________________________________________________________________________________________________

第二种阶段,如果需要配置成网站应用,还是apache+mono+xsp+mod_mono比较稳定些,那就继续下面的配置(xsp里包含了mod_mono_server4和asp_state,也是要必须安装的)

4、安装apache,httpd-devel在编译mod_mono的时候要用到

sudo yum install -y httpd httpd-devel
sudo chkconfig --levels 235 httpd on
sudo systemctl start httpd

 

5、安装并配置mod_mono-3.13

wget https://download.mono-project.com/sources/mod_mono/mod_mono-3.13.tar.gz
sudo tar -xzf mod_mono-3.13.tar.gz
sudo ./configure --prefix=/usr 
sudo make ; sudo make install

修改配置文件

 sudo vi /etc/httpd/conf/mod_mono.conf

在末尾加上

MonoServerPath "/usr/bin/mod-mono-server4"
MonoAutoApplication enabled

然后将配置文件复制到Apache的配置文件目录中: 

sudo cp /etc/httpd/conf/mod_mono.conf /etc/httpd/conf.d/

 6、禁用SELinux

sudo vi /etc/sysconfig/selinux

将“SELINUX=enforcing”修改为“SELINUX=permissive”或“SELINUX=disabled”

7、如果网站程序要调用oracle客户端连接oracle数据库,还要进行如下的配置:

这里跟xsp的配置有区别,由于apache是通过systemd启动的,系统全局变量配置在这里不起作用,而是要在systemd的配置文件中加。

刚开始,是参考文章——Linux下部署ASP.NET服务连接oracle遇到的问题记录

我尝试了一下,发现直接把oracle链接库加入ld.so.conf文件,更新缓存后确实能读取到oracle数据库,但重启系统后无法正常登录进桌面,一直在循环登录,于是变通了一下,在链接库下面再建一个文件夹libclntshso,把libclntsh.so复制进去,然后再sudo vi /etc/ld.so.conf,添加一行链接库新建文件夹所在路径如:/home/wen/app/wen/product/11.2.0/dbhome_1/lib/libclntshso,保存后退出,并执行sudo ldconfig 更新缓存文件就可以了;

另外还需要运行netmgr配置监听程序,但服务命名的连接方式不行,因为没有识别环境变量ORACLE_HOME,要用类似如下的连接字符串进行连接才行,如:

User ID=orcl;Password=123456;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.68.143)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl))

而且还有一个问题,就是NLS_LANG不知道如何配置,读取中文数据还是会出现乱码。后来在网上查找了一下 systemd如何配置环境变量的,才把这个环节搞通了,配置如下:

(1)运行netmgr配置监听程序和服务命名

(2)查找httpd服务的配置文件,我这里的路径在/etc/systemd/system/multi-user.target,wants/httpd.service,打开如图:

1787533999848

这里是用了文件进行配置环境变量,路径在/etc/sysconfig/httpd,找到该文件,在末尾加上相关的三个环境变量定义:

ORACLE_HOME=/home/wen/app/wen/product/11.2.0/dbhome_1
NLS_LANG=AMERICAN_AMERICA.AL32UTF8
LD_LIBRARY_PATH=/home/wen/app/wen/product/11.2.0/dbhome_1/lib
如果不加上ORACLE_HOME,除了服务命名的连接方式不可用,而且还会报Error while trying to retrieve text for error ORA-12705
参考文章——Oracle 连接报错 Error while trying to retrieve text for error ORA-12705

 然后更新变量和重启httpd就可以了

sudo systemctl daemon-reload
sudo systemctl restart httpd

 还有个注意的地方,一般oracle都是安装在用户目录下的,用户目录红框处的权限默认都是“无”,要把这两个地方改成“访问文件”,否则apache用户没办法访问到所设置的路径,还是会报system.dllnotfoundexception:libclntsh.so

image

 

posted on 2026-08-25 23:15  goding  阅读(11)  评论(0)    收藏  举报