前面把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

     class Program
{
static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<NancySelfHost>(s =>
{
s.ConstructUsing(name => new NancySelfHost());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Sample Topshelf Host");
x.SetDisplayName("Catcher Wong");
x.SetServiceName("Nancy的Host");
});
}
}

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

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

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

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

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

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

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

     public class NancySelfHost
{
private NancyHost _nancyHost; public void Start()
{
const string uriStr = "http://localhost:8888/topshelf-nancy/";
_nancyHost = new NancyHost(new Uri(uriStr));
_nancyHost.Start();
try
{
System.Diagnostics.Process.Start(uriStr);
}
catch (Exception)
{
} Console.WriteLine("监听ing - " + uriStr);
} public void Stop()
{
_nancyHost.Stop();
Console.WriteLine("下次再见!");
}
}

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

三、编写我们的Modules

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

     public class HomeModule:NancyModule
{
public HomeModule()
{
Get["/"] = _ => "TopShelf by Catcher Wong";
}
}

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

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

前面的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去处理!

      public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseNancy();
}
}

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

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

     class Program
{
static void Main(string[] args)
{
var url = "http://localhost:9000/";
using (WebApp.Start<Startup>(url))
{
Console.WriteLine("{0} 正在运行",url);
System.Diagnostics.Process.Start(url);
Console.Read();
}
}
}

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

     public class HomeModule : NancyModule
{
public HomeModule()
{
Get["/"] = _ => "Owin Self Hosting Demo";
}
}

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

六、运行试试

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

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

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

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

  1. Nancy之基于Nancy.Hosting.Self的小Demo

    继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后, 今天来做个基于Nancy.Hosting.Self的小Demo. 关于Self Hosting Nancy,官方文档的 ...

  2. 一个基于ES6+webpack的vue小demo

    上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...

  3. Nancy之基于Nancy.Hosting.Aspnet的小Demo

    近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...

  4. Nancy之基于Nancy.Owin的小Demo

    前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katan ...

  5. 一个基于ES5的vue小demo

    由于现在很多vue项目都是基于ES6开发的,而我学vue的时候大多是看vue官网的API,是基于ES5的,所以对于刚接触项目的我来说要转变为项目的模块化写法确实有些挑战.因此,我打算先做一个基于ES5 ...

  6. 基于FPGA的飞机的小游戏

    基于FPGA的飞机的小游戏 实验原理 该实验主要分为4个模块,采用至上而下的设计方法进行设计.由50M的晶振电路提供时钟源,VGA显示控制模块.图形显示控制模块.移动模块的时钟为25M,由时钟分频电路 ...

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

    今天给大家分享一款基于HTML5实现五彩连珠小游戏.这款游戏的规则:点击彩球移动到期望的位置,每移动一次,画面将随机出现3个新的彩球:当同一颜色的彩球连成5个一行或一列或一斜线时,这5个彩球同时消失, ...

  8. 基于Shiro,JWT实现微信小程序登录完整例子

    小程序官方流程图如下,官方地址 : https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html ...

  9. CRMEB系统就是集客户关系管理+营销电商系统,能够真正帮助企业基于微信公众号、小程序实现会员管理、数据分析,精准营销的电子商务管理系统。可满足企业新零售、批发、分销、等各种业务需求。

    **可以快速二次开发的开源小程序商城系统源码**源码开源地址:https://github.crmeb.net/u/LXT 项目介绍: CRMEB系统就是集客户关系管理+营销电商系统,能够真正帮助企业 ...

随机推荐

  1. 通过js实现回到顶部功能

    许多商城网址,当我们滚动到一定高度时,我们会发现一般会出现一个回到顶部的js选项,点击轻松实现回到顶部,交互效果会显得比较人性化,且回到顶部过程中若在滚动滚动条时可以停止滚动,现在让我们来实现吧 我总 ...

  2. window下搭建c开发环境(GNU环境的安装)

    一.在windows平台上安装GNU环境 windows操作系统不自带GNU环境,如果需要开发跨平台的C语言程序,那么需要给windows安装GNU环境 windows下的两款GNU环境:MinGW和 ...

  3. 公司内部培训SQL Server传统索引结构PPT分享

    公司内部培训SQL Server传统索引结构PPT分享 下载地址 http://files.cnblogs.com/files/lyhabc/SQLServer%E4%BC%A0%E7%BB%9F%E ...

  4. PostgreSQL配置优化

    硬件和系统配置 操作系统 Ubuntu13.04 系统位数 64 CPU Intel(R) Core(TM)2 Duo CPU 内存 4G 硬盘 Seagate ST2000DM001-1CH164 ...

  5. .NET Core 构建配置文件从 project.json 到 .csproj

    从 .NET Core SDK 1.0 Preview 3 build 004056 开始,.NET Core 弃用 project.json,回归 .csproj,主要原因是为了兼容 MSBuild ...

  6. 递归算法经典实例小结(C#实现)

     一 .递归算法简介 在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往 ...

  7. EasyPR--开发详解(3)高斯模糊、灰度化和Sobel算子

    在上篇文章中我们了解了PlateLocate的过程中的所有步骤.在本篇文章中我们对前3个步骤,分别是高斯模糊.灰度化和Sobel算子进行分析. 一.高斯模糊 1.目标 对图像去噪,为边缘检测算法做准备 ...

  8. C#+无unsafe的非托管大数组(large unmanaged array in c# without 'unsafe' keyword)

    C#+无unsafe的非托管大数组(large unmanaged array in c# without 'unsafe' keyword) +BIT祝威+悄悄在此留下版了个权的信息说: C#申请一 ...

  9. 小型文件数据库 (a file database for small apps) SharpFileDB

    小型文件数据库 (a file database for small apps) SharpFileDB For english version of this article, please cli ...

  10. JS设计模式(一)

    刚入职时,看过一段时间的设计模式,似懂非懂.不知不觉过去七个月了,对JS的理解更深刻了,数据结构与算法的基础也基本上算是过了一遍了,接下来要把设计模式搞定,然后不再深层次研究JS了,而是学习前端自动化 ...