Nancy主机Host发布Web应用带Razor视图以及Linux下安装Mono编译运行

前言

一、

CSharp的web应用一般发布在IIS服务器上。要在Linux运行C#的web应用则是很麻烦。

一个应用如果关联类库和外界环境等因素太多,那么移植起来要做的事情和遇到的麻烦则越多。

NancyFx是一个出色的C#库,可以独立发布web服务器。官方是这样描述:

Nancy is a lightweight, low-ceremony, framework for building HTTP based services on .NET Framework/Core and Mono.


二、

NancyFx库早于 NetCore 之前发布,对 NetFramewok3.5和4 的支持是比较好的。对应同时期Linux最新版是 Mono4 。

后面 Framework4.5+ ,NETCore,NET Standard版本,已经不断分裂,走向混乱,且互不兼容。Net5 说是大统一,天知道 MS会咋弄。

就像 Apple SwiftCode 那样,API 接口从来没有稳定过,每版本变一下。

同样的代码在两年后的新Framewok下编译,很可能就报废了。。。 

微软收购Xamarin后,Mono 从 5.0起 也开始 逐渐迷失。。。

Android库 现在也有点混乱的迹像,至少现在还部分兼容着老API。一个SDK Manage解决代码兼容上的事,不需要这个SDK下载,那个Framework安装,前置条件一大堆框框。

故,原版库 用得越深,被坑得也越深。

尽管第三方库虽然在某些方面不如人意,但至少API不会变来变去。前几年累积下来的代码还能用,甚至以后的UOS也能用,对于 硬件配置,软件配置,系统运维复杂度,培圳新人 等节省成本资源 都是很有裨益,。

这里文字演示如何使用Nancy在Windows和Linux下发布web服务。

文字描述以精简的方式说明演示流程,如果你觉得相关概念和操作不太清晰,请自行搜索、学习。

[Windows运行]

1,Github下载Nancy源码  https://github.com/NancyFx/Nancy/releases 。 下载 1.x 版本。

2,解压后,使用 VisualStudio 打开 src 下的 sln ( Vs 2010 2013 2015  ) 

   分别编译 Nancy ,Nancy.Hosting.Self,Nancy.ViewEngines.Razor 。或者直接“重新生成解决方案”。

   (需要 net framework 4.0 )
   
   把上面编译出来的 三个 dll 从各自目录的 bin/Debug 里面 提取出来,复制到桌面(或其它地方)。

3,VisualStudio 关闭 Nancy 解决方案。新建项目新建一个 TestNancyRazor 控制台工程。

   把刚才上面编译出来的三个DLL:
   Nancy.dll;Nancy.Hosting.Self.dll;Nancy.ViewEngines.Razor.dll;复制到项目目录下,并对其添加 引用。

   
4,把  Program.cs 改成如下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Nancy.Hosting.Self;

namespace TestNancyRazor
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://localhost:8888/";
            HostConfiguration configuration = new HostConfiguration();
            configuration.UrlReservations.CreateAutomatically = true;

            using (var nancySelfHost = new NancyHost(configuration, new Uri(url)))
            {
                nancySelfHost.Start();
                Console.WriteLine("NancySelfHost已启动。。");
                try
                {
                    Console.WriteLine("正在启动 " + url);
                    Console.WriteLine("成功启动 " + url);
                }
                catch (Exception)
                {
                }
                
                //Linux下开启这行,注释下面两行
                //while (true)System.Threading.Thread.Sleep(1000);
                
                //Windows下开启这两行,注释上面那一行。
                Console.Read();
                nancySelfHost.Stop();
            }
            Console.WriteLine(url + " 已经停止 \n NancySelfHost已关闭。。");            

        }
    }
}


5,新建 RoutePath.cs , 代码如下

namespace Nancy.Demo.Hosting.Self
{
    using System.Linq;

    public class RoutePath : NancyModule
    {
        public RoutePath()
        {
            Get["/{file}.cshtml"] = parameters =>
            {
                return View[(string)parameters.file];
            };

            /*
             * 这样配置就可以模拟MVC,完全绕过了Nancy和Asp内置的MVC!
            Get["/{action}"] = parameters =>
            {
                string action = (string)parameters.action;
                if( action.IndexOf("jn") == 0 )
                {
                    return Response.AsText("Json数据可以写成这样,在cshtml里可以直接写入HTML代码");
                }
                return View[(string)parameters.action];
            }
             */

            
            //更深入的路由,网搜:Nancy 路由
        }
    }
}


/*
静态资源访问,网搜: StaticContentConventionBuilder.AddDirectory 

conventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("statics"));

IRootPathProvider.GetRootPath() { return System.Environment.CurrentDirectory + "/"; }
*/


5,按F5编译,成功运行后,打开浏览器,定位 locahost:8888/ 即可看到效果页面。(curl http://localhost:8888/)

6,在  TestNancyRazor / bin / Debug / 下建个名为 Views 目录。    在 Views 下面建个 rz.cshtml 文件 ,代码如下

<h1>hello</h1>
@System.DateTime.Now.ToString()

    

7,浏览器访问( curl )  locahost:8888/rz.cshtml 即可看到效果


至此,Windows下编译Nancy运行Razor页面成功。

下面在Linux下编译Mono源码方式来运行。

[Linuw运行]
一、打Mono网站:http://download.mono-project.com/sources/mono/ ,下载源码并编译。( CentOS 6.8  )

# wget http://download.mono-project.com/sources/mono/mono-4.8.1.0.tar.bz2
# tar jxvf mono-4.8.1.0.tar.bz2
# cd mono-4.8.1.0

# yum -y install gcc gcc-c++   # 需要安装gcc
# ./configure --prefix=/usr/local
# make  # 过程需15至30分钟
# make install

二、下载 NancyFx.tar.gz 源码包


# ## https://github.com/NancyFx/Nancy/releases/
# wget https://codeload.github.com/NancyFx/Nancy/  tar.gz/
# tar -zxvf  xxx.tar.gz
# cd Nancy/src   # 进入  Nancy/src 目录


### 编译 Nancy.dll
# cd  Nancy  
# xbuild   Nancy.csproj


### 编译 Nancy.Hosting.Self.dll
# cd  Nancy.Hosting.Self
# xbuild   Nancy.Hosting.Self.csproj


### 编译 Nancy.ViewEngines.Razor.dll
# cd  Nancy.ViewEngines.Razor
# xbuild   Nancy.ViewEngines.Razor.csproj

Build succeeded.
         0 Error(s)
         
编译完成,回到bash界面,若出现上面的 提示,表示编译成功。

(测试环境:VM  CentOS 6.9 ,  ali yun repository)


三、把刚才上面在VisualStudio下创建的 TestNancyRazor 工程整个复制到 Linux 里面。(不需复制 bin/ 和 obj/ )


四、Linux 下定位到   TestNancyRazor 文件夹名称

把 刚才用 mono 编译成功的三个 dll : Nancy.dll;Nancy.Hosting.Self.dll;Nancy.ViewEngines.Razor.dll; 复制到 这个 TestNancyRazor 文件夹下,复盖掉原来的win下编译的dll 

### 输入指令大概如下
# cd TestNancyRazor
# rm *.dll -f
# cp Nancy.三个.dll   ./

按照Program.cs里面的注释,修改代码。

然后,编译 TestNancyRazor 工程

# xbuild  TestNancyRazor.csproj


五、编译成功后

# cd bin/Debug

把刚才新建的 Views 目录及里面的文件也复制到 这个 Debug 目录下。

### 运行

### pwd = TestNancyRazor/bin/Debug/
# mono TestNancyRazor.exe  #  加 & 后台运行,用kill指令关闭。


六、访问 locahost:8888/rz.cshtml 即可看到效果

# services iptables stop  #禁用iptables后,局域网其它机器 可以通过打入 IP 访问,


附:

Apache 反向代理

<VirtualHost *:80>
    ProxyPass /nc/ http://localhost:8888/
    ProxyPassReverse /nc/ http://ip:8888/
</VirtualHost>

Nginx 反向代理

location /nc { 
    proxy_pass http://127.0.0.1:8888; 
}
 

猜你喜欢

转载自blog.csdn.net/RoadToTheExpert/article/details/108362297
今日推荐