Nancy之基于Self Hosting的补充小Demo

前面把Hosting Nancy with ASP.NET、Self Hosting Nancy和Hosting Nancy with OWIN

以demo的形式简单描述了一下。

这篇是为Self Hosting Nancy、和Owin 下面的Self Hosting作个补充。

首先是Self Hosting Nancy的补充:

这里主要是介绍一下Topshelf

官网:http://topshelf-project.com/

GitHub地址:https://github.com/Topshelf/Topshelf

Topshelf是一个开源的跨平台的宿主服务框架,支持Windows和Mono,待会我们就把Demo放Linux去试试。

有一千多颗心!不过这个貌似是老外用的比较多一点,中文的资料挺少的。

顺便看看它的 readme.md

"Topshelf is a framework for hosting services written using the .NET framework. The creation of services is simplified,

allowing developers to create a simple console application that can be installed as a service using Topshelf. The reason

for this is simple: It is far easier to debug a console application than a service. And once the application is tested and

ready for production, Topshelf makes it easy to install the application as a service."

简单的概括就是:简单、一个控制台应用程序就可以当作是服务来用。

废话不多说,直接看看它是如何搭配Nancy来用的

一、新建一个控制台应用程序

通过NuGet添加TopShelf的引用

目前它的最新版本是3.3.1。

当然也少不了添加Nancy和Nancy.Hosting.Self的引用

到这里,基本工作已经完成了。

二、打开Program.cs,开始Coding

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             HostFactory.Run(x =>
 6             {
 7                 x.Service<NancySelfHost>(s =>
 8                 {
 9                     s.ConstructUsing(name => new NancySelfHost());
10                     s.WhenStarted(tc => tc.Start());
11                     s.WhenStopped(tc => tc.Stop());
12                 });
13                 x.RunAsLocalSystem();
14                 x.SetDescription("Sample Topshelf Host");
15                 x.SetDisplayName("Catcher Wong");
16                 x.SetServiceName("Nancy的Host");
17             });
18         }
19     }

x.Service<NancySelfHost>是告诉TopShelf,服务类型是NancySelfHost

s.ConstructUsing(name => new NancySelfHost()) 是告诉Topshelf如何创建这类服务,最直接的就是实例化,当然也可以用IoC来依赖注入

s.WhenStarted和WhenStopped应该比较明显了,开始和停止

x.RunAsLocalSystem()表明用本地系统账号来运行

这里还有其他的RunAsxxx列出给大家参考

名称  说明
RunAsPrompt 当安装了服务时,安装程序将提示输入用户名/密码组合用于启动该服务。
RunAsLocalService 使用本地服务帐户运行
RunAsNetworkService 使用 NETWORK_SERVICE 内置帐户运行

看了大致的解析,知道还需要自己定义一个服务类型NancySelfHost

 1     public class NancySelfHost
 2     {
 3         private NancyHost _nancyHost;
 4
 5         public void Start()
 6         {
 7             const string uriStr = "http://localhost:8888/topshelf-nancy/";
 8             _nancyHost = new NancyHost(new Uri(uriStr));
 9             _nancyHost.Start();
10             try
11             {
12                 System.Diagnostics.Process.Start(uriStr);
13             }
14             catch (Exception)
15             {
16             }
17
18             Console.WriteLine("监听ing - " + uriStr);
19         }
20
21         public void Stop()
22         {
23             _nancyHost.Stop();
24             Console.WriteLine("下次再见!");
25         }
26     }

里面的内容应该都比较熟悉了,就包含了开始和停止的方法,不再一一解释了。

三、编写我们的Modules

老规矩:Modules文件夹、HomeModule.cs

1     public class HomeModule:NancyModule
2     {
3         public HomeModule()
4         {
5             Get["/"] = _ => "TopShelf by Catcher Wong";
6         }
7     }  

四、运行调试一番,看看效果如何

这里需要强调一点:需要用管理员的身份才能正常运行,否则会出现如下错误

前面的Nancy之基于Nancy.Hosting.Self也是如此,但是忘记说明,在此深表歉意!!

下面是运行效果:

正是我们所期待的。

然后再看看命令行窗口,会发现这些提示和我们在Program.cs设置的是相关的。设置的语句就是

x.SetXXXX()

五、还是老规矩,放linux下试试

将bin目录下的文件上传到 /var/www/topshelf/

然后执行 mono TopShelfDemo.exe 即可

下面看看效果:

貌似提示相比windows多了一些东西,不过不影响我们的正常运行。

不知道各位是否发现这跟前面讲的Nancy之基于Nancy.Hosting.Self的小Demo十分相似!!!

就连后面要讲的基于Owin的Self Hosting也很相似,都是仅多了相应的操作方法!

好了,Topshelf就讲到这里了,不再进一步深入探讨了,如果您有更好的建议可以私聊我。O(∩_∩)O

下面简单讲讲基于Owin的Self Hosting

前面也提到了,"Self Hosting" 这一类都是大同小异,十分相似。

下面就直接进入正题

一、创建控制台应用程序

二、添加相关的引用

直接通过Package Manager Console来添加

  Install-Package Nancy.Owin

  Install-Package Microsoft.Owin.Hosting

  Install-Package Microsoft.Owin.Host.HttpListener

三、新建一个OWIN Startup class

我们在添加的Startup.cs中的Configuration中添加一下app.UseNancy(),将Nancy交由Owin去处理!

1      public class Startup
2     {
3         public void Configuration(IAppBuilder app)
4         {
5             app.UseNancy();
6         }
7     }

四、打开Program.cs,编写代码

记得要添加Microsoft.Owin.Hosting的引用

 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             var url = "http://localhost:9000/";
 6             using (WebApp.Start<Startup>(url))
 7             {
 8                 Console.WriteLine("{0} 正在运行",url);
 9                 System.Diagnostics.Process.Start(url);
10                 Console.Read();
11             }
12         }
13     }

WebApp是Microsoft.Owin.Hosting下面的一个类,WebApp.Start<Startup>(url)可理解为根据我们指定的url去启动网站(从名字也能知道个大概)。

具体的可以参考msdn的介绍:

https://msdn.microsoft.com/en-us/library/microsoft.owin.hosting.webapp(v=vs.111).aspx

五、编写Modules

老规矩,Modules文件夹,HomeModule.cs

1     public class HomeModule : NancyModule
2     {
3         public HomeModule()
4         {
5             Get["/"] = _ => "Owin Self Hosting Demo";
6         }
7     }

我们这里也只是输出一下文字!

六、运行试试

正是我们所期待的结果!是不是很简单呢!O(∩_∩)O

好了,关于Nancy Hosting的Demo暂时告一段落了,谢谢各位的支持!

后面会继续深入学习Nancy,分享学习过程中的一些细节和心得体会。O(∩_∩)O

时间: 2024-10-26 04:24:51

Nancy之基于Self Hosting的补充小Demo的相关文章

一个基于ES6+webpack的vue小demo

上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 我们先搭建一下vue 的开发环境,根据我的一篇随笔<Vue开发环境搭建及热更新>,我们一步步搭建开发环境,project名为ES6-demo. 在之前我发表的一篇随笔< 理解最基本的Vue项目>中,说到了在放置组件和入口文件的src文件夹中,main.js文件就是入口文件,App.v

Nancy之基于Nancy.Owin的小Demo

前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katana 什么是Owin呢? 官网地址:http://owin.org OWIN在.NET Web Servers与Web Application之间定义了一套标准接口,OWIN的目标是用于解耦Web Server和Web Application. 什么是Katana呢? 官网地址:http://kata

基于宿主机制作一个小系统

一.Linux系统的启动流程 1.启动程序 Linux系统的启动流程为:POST-->BIOS(BootSequence)-->MBR(bootloader,446)--> Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab). 首先上电自检POST:它负责完成对CPU.主板.内存.软硬盘子系统.显示子系统(包括显示缓存).串并行接口.键盘.CD-ROM光驱等的检测.主要检查硬件的好坏. 紧接着就是BIOS进行硬件相关初始化,之

基于FPGA的飞机的小游戏

基于FPGA的飞机的小游戏 实验原理 ????该实验主要分为4个模块,采用至上而下的设计方法进行设计.由50M的晶振电路提供时钟源,VGA显示控制模块.图形显示控制模块.移动模块的时钟为25M,由时钟分频电路产生获得.时钟分频模块采用PLL进行设计,由50M时钟进行2分频获得25M时钟. ????移动模块,控制我方飞机和敌方飞机.子弹的移动,移动的速度可以通过时钟的频率进行控制,操作我方飞机的移动和子弹的发射由外部按键进行控制,控制的方式有发射子弹.左移.右移. ????图像显示控制模块,用于控

基于HTML5实现五彩连珠小游戏

今天给大家分享一款基于HTML5实现五彩连珠小游戏.这款游戏的规则:点击彩球移动到期望的位置,每移动一次,画面将随机出现3个新的彩球:当同一颜色的彩球连成5个一行或一列或一斜线时,这5个彩球同时消失,游戏得分10分.当画面上每个方格都被彩球占满时,游戏结束. 在线预览   源码下载 实现的代码. html代码: <canvas id="canvas" height="400" width="600" style="backgrou

基于 Autojs 的 APP、小程序自动化测试 SDK

原文:https://blog.csdn.net/laobingm/article/details/98317394 autojs sdk基于 Autojs 的 APP.小程序自动化测试 SDK,支持:启动应用.停留等待.判断存在.文本点击.颜色点击.循环点击.坐标拾取.语音播报.通知栏提示.音量调节.震动等数十项能力. autojs sdk 在 Auto.js 的基础上,通过大量接口优化提升了模块的通用性,并进行丰富的功能扩展. 运行环境下载下载方式:sdk 测试阶段请加群下载 autojs

基于 Autojs 的 APP、小程序自动化测试 SDK - 2019年8月3日

原文:https://blog.csdn.net/laobingm/article/details/98317394 autojs sdk基于 Autojs 的 APP.小程序自动化测试 SDK,支持:启动应用.停留等待.判断存在.文本点击.颜色点击.循环点击.坐标拾取.语音播报.通知栏提示.音量调节.震动等数十项能力. autojs sdk 在 Auto.js 的基础上,通过大量接口优化提升了模块的通用性,并进行丰富的功能扩展. 运行环境下载下载方式:sdk 测试阶段请加群下载 autojs

新手 gulp+ seajs 小demo

首先,不说废话,它的介绍和作者就不在多说了,网上一百度一大堆: 我在这里只是来写写我这2天抽空对seajs的了解并爬过的坑,和实现的一个小demo(纯属为了实现,高手请绕道); 一.环境工具及安装 1.首先,务必先说明,本demo是基于nodeJs环境下开发的,因此要安装nodeJs(地址:https://nodejs.org/en/): 2.接下来安装gulp: 在第一步成功的情况下,安装gulp构建工具,并且将其依赖到项目进来:同时需要安装browser-sync,gulp-seajs-co

iOS启动时如何添加引导页面 小demo

相信大家都看到过手机应用在启动的时候,都会有一个很漂亮的页面,在这个页面显示之后,如果你是第一次打开该应用还会有提示图片(如程序怎么使用等等),今天自己写了一个小demo 在此分享一下,可以给新学者一个参考             以上就是在Xcode中如何找到设置引导页面的位置 对于图片的设置大家可以看到图中有2x  和R4 两种,对于这两种类型的区别如下 R4 代表的是Retina屏幕也就是高清屏,那么这里我们选择的引导图片,一般情况下,在工程中如果有[email protected] 或者