Nancy之基于Self Hosting的补充小Demo

时间:2023-02-20 20:45:31

前面把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去试试。

Nancy之基于Self Hosting的补充小Demo

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

顺便看看它的 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的引用

Nancy之基于Self Hosting的补充小Demo

目前它的最新版本是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之基于Self Hosting的补充小Demo

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

下面是运行效果:

Nancy之基于Self Hosting的补充小Demo

正是我们所期待的。

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

x.SetXXXX()

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

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

然后执行 mono TopShelfDemo.exe 即可

下面看看效果:

Nancy之基于Self Hosting的补充小Demo

貌似提示相比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";
}
}

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

六、运行试试

Nancy之基于Self Hosting的补充小Demo

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

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

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

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

  1. Nancy之基于Nancy&period;Hosting&period;Self的小Demo

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

  2. 一个基于ES6&plus;webpack的vue小demo

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

  3. Nancy之基于Nancy&period;Hosting&period;Aspnet的小Demo

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

  4. Nancy之基于Nancy&period;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&comma;JWT实现微信小程序登录完整例子

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

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

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

随机推荐

  1. ActiveX(三)ActiveX 调用 Js

    在上一篇随笔: ActiveX(二)Js 监听 ActiveX中的事件  中,已经可以实现 Js 监听 ActiveX中的事件,至此.Js 和 ActiveX 已经可以实现双向通讯了.但是.这样的实现 ...

  2. c语言中-&gt&semi;&lpar;间接成员运算符&rpar;的含义

    写于2016年12月12日. "->"称为间接成员运算符. 总体注解:这个运算符与指向结构(sturct)或联合(union)的指针一起使用,用来指明结构或联合的的成员.假设 ...

  3. Android 6&period;0权限管理

    Android 6.0权限管理 关于权限管理 Android6.0 发布之后,Android 的权限系统被重新设计.在 23 之前 App 的权限只会在用户安装的时候询问一次,App一旦安装后就可以使 ...

  4. quailty&&num;39&semi;s Contest &num;1 A1 道路修建 Small

    暴力.每次合并两个点之后,把新产生的连通关系都记录下来. #include<cstdio> #include<algorithm> #include<vector> ...

  5. Admob - Google广告接入

    前言 现在免费小游戏及应用的主要收入渠道就是通过接入广告.而Google的Admob适用于全球范围内的广告接入,文档方面及后台管理也是较为完善,接入还是比较便捷的. 不过Google目前还在墙外,虽然 ...

  6. 浅谈Java中static关键字、权限修饰符

    1.实例变量:也称非静态成员变量,实例变量前没有static关键字,用来描述同一类事物的公共属性.访问方式:对象名.变量名.实例变量存储在堆区,对象有n个,数据就有n个.实例变量随着对象的创建而创建, ...

  7. Android——使用Toolbar &plus; DrawerLayout快速实现高大上菜单侧滑(转)

    今天就来使用官方支持库来快速实现这类效果,需要使用到Toolbar和DrawerLayout,详细步骤如下:(如果你还不知道这两个Widget,先自己Google吧~) 1.首先需要添加appcomp ...

  8. iOS多线程编程之NSOperation的基本操作&lpar;转载&rpar;

    一.NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperat ...

  9. Here we take a closer look at the Jordans Unveil

    Here we take a closer look at the Jordans Unveil. This Mens release is both unique and striking. The ...

  10. &lbrack;翻译&rsqb;NUnit---TestCase Attributes&lpar;二十一&rpar;

    TestCaseAttribute (NUnit 2.5) TestCase特性有两个效果,包括标记一个方法使用参数并且在调用的时候提供内置数据.示例如下,本示例会使用不同数据集执行3次: [Test ...