Nancy的Self Hosting

衣明志 发表于 , 阅读 (6452)

本文是继《NancyFx系列之 Hello World》之后的第二篇,如果你还没听说过Nancy,可以先看看那篇我4月份就写好的文章,了解一下Nancy大概是个怎样的东东。

前文中,写过了如下一个Hello world的代码。

public class HomeModule : Nancy.NancyModule
{
        public HomeModule()
        {
            Get["/"] = x => "Hello World!";
        }
}

清新明了,一看就明白,http请求方式是GET,相对地址是/,响应结果是Hello world。但是,这个代码要怎么跑起来呢?我们前面提到过Nancy跟ASP.NET MVC有一些类似,都是一个Web服务端的东东。既然是服务端代码,那就得有个Host啊,不然是没法运行的。

正如我在前文中提到的,Nancy具备极佳的可扩展性,灵活度非常高。同样,Nancy的Host也是极其灵活和丰富的。如果你读过Nancy官方Wiki的话,可能已经了解到Nancy支持如下多种Host方式:

建议先从Self Hosting Nancy开始

按照一贯的风格,我还是先从相对简单且容易理解的方式开始吧。上面哪个方式简单又容易理解呢?Self Hosting!有些人,尤其是习惯了ASP.NET的开发者,可能会选择ASP.NET Hosting。作为从最早的Beta版就开始玩ASP.NET的我来说,刚学Nancy的东西时,也想用ASP.NET Hosting,因为貌似这个更熟悉一些。但是,我上篇文章中提到过,Nancy本身跟ASP.NET没有直接的关联关系,它的Context跟ASP.NET的Context没有1毛钱关系,因为Nancy完全不依赖于System.Web这个命名空间下的东西。所以如果上去就先选ASP.NET Hosting的话,很可能会让你徒增烦恼。

Self Hosting 顾名思义,就是自己Host自己。也就是不需要依赖别的应用,而让应用本身就是服务。一个Console程序或者一个Winform程序都是一个应用,Self Hosting 就是将Nancy服务Host在这个应用自身中。是不是有点酷呢?你有没有想到一些应用场景(如OA之类),如果能这样就好了呢?

通常程序员学习一门语言时先都是用Console输出一个Hello World,那么今天我们就以Console Project开始吧:

  1. 首先,我们使用Visual Studio或者Visual Studio Code或者Xamarin Studio创建一个新的Console项目。

  2. 然后在项目中,用Nuget包管理之类的工具,将Nancy.Hosting.Self包添加到刚才建立的Console项目中。

  3. 在刚建好Console项目中的入口类Main.cs中,创建一个NancyHost实例,并调用Start方法,启动Nancy的Web服务。

SelfHost的启动代码如下:

using (var host = new NancyHost(new Uri("http://localhost:1234")))
{
    host.Start()
    Console.ReadLine();
}

然后,在该项目添加一个HomeModule.cs文件,将前面那段Helloworld代码替换默认生成的HomeModule类。

OK,恭喜你。你的Self Hosting Nancy已经初步写完了。让我们按一下F5,跑起来看看……

呃~你说你的运行不了,嗯。忘了提示你:在Windows上你需要用管理员权限运行你的Visual Studio,然后才能调试运行。否则,你只能先编译好,然后找到编译出来的exe文件,以管理员身份运行该程序,才能看到效果。

怎么才能看到上面代码的运行效果,也就是看到你的"Hello Word"输出呢?打开浏览器,在地址栏输入http://localhost:1234/,然后回车。看到结果了吧?^_^

可能你会想,为什么HomeModule.cs,没有在任何地方被显式引用或者调用,就能运行呢?其实这是因为Nancy的Module于ASP.NET MVC中的Controller一样,是可以被自发现的。关于Module的详情,我们下篇详细言表。

7 条评论
cuibty
cuibty 2015-12-08 11:46
密切关注老依的Nancy系列博文
ahyun
ahyun 2015-12-09 08:45
跟着大神走少走弯路
肥爪
肥爪 2015-12-09 20:10
大神我有个问题,Nancy中返回string如何设置编码?
肥爪
肥爪 2015-12-09 20:15
找到解决方法了, http://stackoverflow.com/questions/23590020/nancyfx-set-default-charset-to-utf8
菜鸟
菜鸟 2015-12-12 17:41
特来拜会
刺客
刺客 2015-12-22 20:18
终于等到Nancy的第二篇文章了,期待继续更新!
vf
vf 2016-08-30 16:20
Nancy系列咋不更新了呢!