原文: 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