• 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

  • 相关阅读:
    HDU 2089 不要62 【数位dp】
    HDU 3507 Print Article(dp+斜率优化)
    HDU 1078 FatMouse and Cheese【记忆化搜索】
    codeforces 366C Dima and Salad 【限制性01背包】
    HDU
    HDU 2844 Coins 【多重背包】(模板)
    hdu 2167 方格取数 【状压dp】(经典)
    poj 1160 Post Office 【区间dp】
    Poj
    HDU 1542 矩形面积并【离散化+线段树+扫描线】
  • 原文地址:https://www.cnblogs.com/catcher1994/p/5155082.html
Copyright © 2020-2023  润新知