[.NET][C#].NET走跳在Linux的人生(四)ASP.NET With mono xsp(Windows Deploy)

上一篇我們簡單用mono project的範例,在Linux新增ASP.NET程式碼(hello.aspx )並且編譯然後執行,這篇來試試直接把Windows環境編譯好的網站程式放到Linux環境下執行。 

*因為我們習慣Windows環境以及Visual Studio開發環境,如同Console專案的測試,暫時就先不用MonoDevelop IDE進行開發

 


環境:

  • AP環境: Red Hat Enterprise Linux + Apach 
  • 開發環境: Windows 10 + Visual Studio 2017  
  • DB環境: Red Hat Enterprise Linux + SQL Server 2017 CTP2.1  

 

步驟: 

  • 1.Windows環境開發ASP.NET應用程式 
  • 2.資料庫設定 
  • 3.執行網站測試 
  • 4.移除組態檔案中的編譯器設定 
  • 5.移除ScriptResource 
  • 6.過版到Linux環境 
  • 7.啟動xsp網站伺服器 

 


1.Windows環境開發ASP.NET應用程式 

新增ASP.NET Web應用程式(.NET Framework)

選擇Web Form 

新增Web表單 Poker.aspx 

Poker.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Poker.aspx.cs" Inherits="MonoWebForm.Poker" %> 
<!DOCTYPE html> 
<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"> 
        <div> 
            <asp:GridView ID="gdvData" runat="server" CssClass="table table-hover table-bordered" AutoGenerateColumns="false"> 
                <Columns> 
                    <asp:BoundField DataField="ID" HeaderText="編號#" /> 
                    <asp:BoundField DataField="NAME" HeaderText="人物名稱" /> 
                    <asp:BoundField DataField="TITLE" HeaderText="卡種" /> 
                    <asp:BoundField DataField="COLOR" HeaderText="花色" /> 
                </Columns> 
            </asp:GridView> 
        </div> 
    </form> 
</body> 
</html> 

 

Poker.aspx.cs

using System; 
using System.Data.SqlClient; 
namespace MonoWebForm 
{ 
    public partial class Poker : System.Web.UI.Page 
    { 
        //錯誤範例,不要把連線字串和密碼放在程式裡!!! 
        public static string CN = @"data source=192.168.100.100;initial catalog=tempdb;User ID=ImDba;Password=xxxx"; 
  
        protected void Page_Load(object sender, EventArgs e) 
        { 
            if (!IsPostBack) 
            { 
                loadGridData(); 
            } 
        } 
        private void loadGridData() 
        { 
            using (SqlConnection con = new SqlConnection(CN)) 
            { 
                using (SqlCommand cmd = new SqlCommand()) 
                { 
                    cmd.CommandText = "SELECT * FROM Pokers "; 
                    cmd.Connection = con; 
                    con.Open(); 
                    gdvData.DataSource = cmd.ExecuteReader(); 
                    gdvData.DataBind(); 
                    con.Close(); 
                } 
            } 
        } 
    } 
} 

 


2.資料庫設定 

我們需要有一個簡單的Poker Table 

USE TEMPDB 
  
CREATE TABLE POKERS( 
    ID INT 
    , NAME VARCHAR(20) 
    ,TITLE VARCHAR(10) 
    ,COLOR VARCHAR(10) 
    ) 
  
INSERT INTO POKERS 
VALUES(1, 'David',      'King', 'Spades' ), 
      (2, 'Charlemagne','King', 'Hearts' ), 
      (3, 'Caesar',     'King', 'Diamonds'), 
      (4, 'Alexander',  'King', 'Clubs' ), 
      (5, 'Athena',     'Queen','Spades' ), 
      (6, 'Judith',     'Queen','Hearts' ), 
      (7, 'Rachel',     'Queen','Diamonds' ), 
      (8, 'Argine',     'Queen','Clubs' ), 
      (9, 'Ogier',      'Jack', 'Spades'), 
      (10,'La Hire',    'Jack', 'Hearts'), 
      (11,'Hector',     'Jack', 'Diamonds' ), 
      (12,'Hammer',     'Jack', 'Clubs' ) 

 


3.執行網站測試 

Windows環境執行Web Form程式 

Ok!Windows環境完成測試了,接下來放到Linux上執行。 

 


4.移除組態檔案中的編譯器設定 

web.config檔案中的complier 

如果沒有移除,佈署到Linux後,網站會出現以下找不到c#編譯器錯誤訊息 

System.IO.FileNotFoundException :Could not find file /root/donet/webform/bin/roslyn/csc.exe 

  (其實路徑下明明有) 


5.移除ScriptResource 

修改BundleConfig.cs  

將以下程式碼註解(Scripts/modernizr~*  + ScriptResource)

如果沒有移除,佈署到Linux後,會出現以下型別無法載入的問題 

發生在System.Web.extinsions 組件 

 


6.過版到Linux環境 

還是使用pscp指令傳送到Linux對應目錄下 

pscp -r E:\Test\MonoWebForm\*.* root@192.168.100.101:/root/dotnet/webform/ 

 

下次來試試用ftp的方式,從Visual Studio One-Click Deploy(一鍵佈署) 

 


7.啟動xsp網站伺服器 

切換到網站根目錄後,啟動xsp伺服器。

xsp4 --port 9000 

 

檢視ASP.NET網頁 

http://localhost:9000/Poker.aspx 

成功!

 


小結: 

  • 比預期中多了關卡要克服,呼!

  • 如果專案中有使用AJAX Control(AjaxControlToolkit),目前測試起來與Mono不太相容,也許要改用JQuery UI以及JQuery Library來替代了。 

  • 準備佈署到apache server。

 


參考: 

Getting Started (Mono-basics) 

Mono System.Web.Extensions in 4.0 vs MS.NET 4.0