asp.net在Linux下的開發與運行實踐

近期由於一個項目需要,進行了將ASP.NET網站部署在Linux下的調研,並做了一些DEMO來進行測試。最後由於客戶不接受在Linux上跑.net程序,我們的工作也只能做到這一步。記錄在此,以便後續需要時好查閱。

由於我們項目使用了文件依賴緩存、推技術,故調研中對這些技術在Linux下是否能穩定運行有較多關注。

在此之前我們對於Linux的經驗甚少,如果此文描述有錯誤之處,歡迎各位批評指正。

 

一:方案思路

採用在Linux環境下運行現有的***平臺[.NET],數據庫採用Oracle 10g

***目前於Windows平臺上能穩定運行,我們可以使用Mono,通過一些代碼及架構調整將***平臺穩定、高效運行於Linux系統下。

 

二:Mono簡介

Mono是一個由Novell公司(Ximian發起,並由Miguel de lcaza 領導的,一個致力於開創.NETLinux上使用的開源工程。它包含了一個C#語言的編譯器,一個CLR的運行時,和一組類庫,並實現了 ADO NETASP NET。能夠使得開發人員在LinuxC#開發程序。)主持的項目.

該項目的目標是創建一系列符合標準ECMA (Ecma-334Ecma-335).Net工具, 包括C #編譯器和共同語言(CL Common Language)執行平臺(Platform).與微軟的.Net不同, Mono項目不僅可以運行於Windows系統內,還可以運行於Linux, FreeBSD, Unix, Mac OS XSolaris

首頁:

http://www.mono-project.com/Main_Page

 

三:Mono應用案例

目前Mono已經被國內外廣泛使用,以下提供幾個案例以做參考:

1.       中天證券

網址:http://www.stockren.com/

 

2.       東北師大附中

網址:http://www.msannu.cn

 

3.       四川省蓬溪縣人民政府

網址:http://www.pengxi.gov.cn/

 

以上案例涵蓋證券、教育、政府等多個行業。

 

以下是Mono官網上提到的衆多使用Mono的成功案例:

http://www.mono-project.com/Software

 

四:運行環境

Linux  + apache2.2 + Mono2.10.8.1 + Oracle 10g,所使用的.net匹配版本爲2.0版。

目前測試的Linux平臺是Ubuntu,其他主流Linux下同樣支持,部署方法大同小異。

Web服務器不侷限於apache,可以換用Nginx,或者是咱們國人開發的Jexes,這幾大Web服務器是目前使用較爲廣泛,性能較好的幾個選擇。

 

五:Linux下部署MonoApache

相關文章參考:

http://www.cnblogs.com/hcl0208/archive/2010/10/25/1860173.html

http://www.cnblogs.com/andhm/archive/2012/08/02/2619680.html

http://www.guanwei.org/post/LINUXnotes/01/ubuntuapache2configure.html

 

1. 安裝apache2

apt-get install apache2

 

2. 安裝Mono

使用的在界面上安裝的辦法,如果使用命令:

 

apt-get install mono-gmcs mono-xsp2 

apt-get install libapache2-mod-mono

apt-get install mono-apache-server2

 

sudo a2enmod mod_mono

 

3. 配置mono運行庫

1)修改配置文件./etc/apache2/mods-available/mod_mono.conf  以達到可以顯示控件

DirectoryIndex index.aspx

增加如下兩行

MonoAutoApplication enabled

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

2). 重啓apache

sudo /etc/init.d/apache2 restart

 

4. 設置忽略大小寫 [Ubuntu]

/etc/apache2/mods-enabled

1). 增加speling.conf

內容:CheckSpelling on

 

2). 增加 speling.load

內容:LoadModule speling_module /usr/lib/apache2/modules/mod_speling.so

 

5. apache設置虛擬目錄

/etc/apache2下修改apache2.conf,在最後增加:

Alias /monotest/ "/var/www/monotest/"

<Directory "/var/www/monotest">

    Options Indexes FollowSymLinks

    AllowOverride None

    Order allow,deny

    Allow from all

</Directory>

 

六:Linux下安裝Oracle XE 10g及訪問

1. 安裝Oracle XE 10g

1). 下載oracle-xe-universal_10.2.0.1-1.0_i386.deb

2). 執行sudo dpkg -i oracle-xe-universal_10.2.0.1-1.0_i386.deb

3). 編輯/etc/profile,增加如下:

export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server

export LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib

PATH=$LD_LIBRARY_PATH:$PATH:

export PATH

啓動oracle xe 10g

sudo /etc/init.d/oracle-xe restart

 

2. Linux上安裝Oracle XE 10g客戶端

1). 下載oracle-xe-client_10.2.0.1-1.0_i386.deb

2). 執行sudo dpkg -i oracle-xe-client_10.2.0.1-1.0_i386.deb

3). 編輯/var/bin/mod-mono-server2,增加如下:

export LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib:$LD_LIBRARAY_PATH

export NLS_LANG=AMERICAN_AMERICA.UTF8

重啓apache

sudo /etc/init.d/apache2 restart

注:之所以採用下載離線安裝包的辦法,是因爲在我家裏的網絡中,沒有辦法訪問oracle的軟件源信息。

下載地址如下:

http://115.com/355054741

 

七:Linux設置文件共享及緩存訪問

1. 在共享服務器上安裝nfsserver

sudo aptitude install nfs-kernel-server

 

2. 在訪問客戶機上安裝client

sudo apt-get install nfs-common

 

3. 在服務器上添加共享的目錄【設置好讀寫權限】

/home/web/sharedirtest 192.168.2.179(rw,sync,no_subtree_check)

 

4. 在服務器上啓動NFS服務

sudo exportfs -r

sudo /etc/init.d/portmap restart

sudo /etc/init.d/nfs-kernel-server restart

 

5. 在客戶機上加載此共享的目錄

$sudo mount 主機IP:/home/yourname/sharedir ~/nfsshare

注意,nfsshare必須先存在

 

6. 讀寫緩存中的注意點。

mount目錄後,即可按本地路徑一樣來進行使用,需要注意的是:緩存指定的文件需要有讀寫權限[chmod 777 dir -R],否則緩存無響應

另:通過共享目錄的緩存,可能會有延遲。

 

可以採用兩種方案:

1.oracle寫本地文件, web讀加載的共享目錄

2.web讀本地文件, oracle寫加載的共享目錄

 

測試發現在monodevelop下編譯的訪問共享的緩存正常,但WIN下編譯的不生效

 

八:其他

設置開機啓動:

sudo /etc/init.d/oracle-xe enable

 

添加連接文件:

sudo ln -s /etc/apache2/sites-available/chaichunyan  /etc/apache2/sites-enabled/chaichunyan

 

注:

apache的設置中,可以將配置放在任何一個文件中,只是爲了便於管理,建議還是各自分開配置。

將相關的模塊放於available中,需要啓用時,在enable中添加鏈接即可。

 

mono下通過調用存儲過程時構造參數的異常:

 

OracleParameter para = new OracleParameter("test", OracleType.Varchar);

會報異常,提示未將對象設置到實例:

http://mono.1490590.n4.nabble.com/System-Data-OracleClient-OracleParameter-SetOracleType-bug-td3855825.html[[BR]]

 

處理辦法:

OracleParameter para = new OracleParameter();

para.ParameterName = "cur_OUT";

para.Value = 1;

para.OracleType = OracleType?.Cursor;

 

提供了一個測試的DEMO,可以在此下載:http://download.csdn.net/detail/tragicguy/5430001

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章