Nancy总结(三)Nancy资料介绍

  Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,可以基于 .NET 和 Mono 平台构建轻量级基于 HTTP 的Web 服务。它更多的是借鉴了Ruby的一些特性和Ruby的MVC 的思想。所以这使得 Nancy非常易懂易用。

 

Nancy表面上看起来与Asp.net MVC相似,但它有一套自己的路由机制,提供了简单优雅的路由,更加使用易用,可以用Nancy快速开发一些网站。

 

  官网: http://nancyfx.org/

  源码:https://github.com/NancyFx/Nancy

  文档: https://github.com/NancyFx/Nancy/wiki/Documentation

  Blog: http://blog.nancyfx.org/ 

  在线交流:http://jabbr.net/#/rooms/nancyfx 这个是nancy 的在线交流的地方。Nancy 的开发的大牛和作者,都在里面,回答各种问题。(ps:注意时差,有可能你问了一些问题,要到第二天,才能得到答复。)

  介绍个使用Nancy 做的小系统

  https://github.com/weizhong1988/DinnerParty

 

Nancy总结(二)记一次Nancy 框架中遇到的坑

记一次Nancy 框架中遇到的坑

   前几天,公司一个项目运行很久的Nancy框架的网站,遇到了一个很诡异的问题。Session 对象跳转到另外一个页面的时候,session对象被清空了,导致用户登录不上。搞了两天,终于解决了。于是把它记录下来,以避免其他人也碰到这种情况。

  起因

  公司一个Nancy 框架 开发的web网站,以前一直都是好的,nancy 框架也用在了很多项目里面,基本上已经很成熟很稳定了,但是在前几天发布某个web网站的时候,竟然出现部分用户登录不上的情况。刚开始以为是人员的权限有问题,于是检查各个人员的权限。但是发现权限设置没问题,而且同一个角色下的两个人,竟然还会出现一个用户能登陆,而另一个却不能登陆的诡异情况。

 

  调查

    在确认不是系统权限设置的问题之后,开始debug 跟踪调试。发现本来已经登陆成功,存储用户登陆信息的session对象,在跳转到index 页面之后,session 对象竟然不清空了,这是怎么回事呢,可是也不是所有的用户的登陆session都会被清空,而是部分人的session对象被清空了,而且登陆功能,在前期一直都是正常的,没出现过这种情况。

  1. 首先怀疑session存储的对象,最近是不是有变动,询问后,发现,User 对象最近确实是增加了一个字段,但是增加一个字段,怎么会影响到session的存储呢,

  2. 把新加的字段去掉,原先不能登陆的用户,竟然能够可以登陆成功,但是其他的一些用户,还是不能登陆,于是开始比较能登陆的用户和不能登陆的用户的数据有什么不同。有可能还是数据的原因,对比之后发现用户数据基本没什么问题,但是普遍的是能登陆上的用户的信息都比不能登陆上的用户的信息要少。

  3. 于是基本可以断定是由于session 存储的用户数据的大小导致的。可是,Nancy 框架下的session 会对 存储数据的大小有限制呢。

 

  解决

  既然知道问题出在哪,于是去jabbr Nancy聊天室问框架的作者。老外表示:Nancysession机制, 是基于cookie 的,客户端和服务器交互的cookie 大小限制在4k 以下,超过4k 就会获取不到。

  但是经过我们的反复测试,确定限制是在2k,而不是4k,我去,坑啊。但是不管是4k还是2k 确实是有这个限制存在。 

  于是问他这个能否设置大一点。老外答复说:大小不能设置,只能修改存存储对象的大小,因为他们在设计之初的时候,session 就不是用来存用户的全部信息的。而是只存用户主要信息或是用户的唯一ID ,到用到用户的信息的时候,再去数据库里面读取。

  看来只能减少用户信息的大小了。于是去掉了Session 里面的User 对象de 一些没有用的字段。果然所有的用户都能进了。 折腾了2天的问题,终于解决。

Nancy总结(一)Nancy一个轻量的MVC框架

  Nancy是一个基于.net 和Mono 构建的HTTP服务框架,是一个非常轻量级的web框架。

  设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATCH 等请求方法,并提供简单优雅的 DSL 以返回响应。它提供了一个super-duper-happy-path的交互方式,无需定义各种复杂的路由规则,Nancy会根据你的请求路径自动匹配。Nancy和ASP.NET MVC不同,它更多的是借鉴了Ruby的一些特性。

 

  Nancy 的特点:
    1. 建立了自下而上的,而不是简单地DSL的现有框架。删除很多不必要的限制和特性,尽可能的只引用你需要的组件。使其保持简单。
    2. 随处运行。Nancy不是建立在任何特定的平台下的的,它可以在任何地方运行。Nancy支持运行在ASP.NET/IIS,WCF,自宿主和任何OWIN。
    3. 定义了非常轻量的 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATCH 等请求。
    4. 集成了各种模板引擎(Razor, Spark, dotLiquid 和自带的SuperSimpleViewEngine)。
    5. 强大的请求路径匹配,包括先进的参数功能。路径匹配策略可以使用自定义实现您的各种具体需求。
    6. 简单的Response的语法,可以返回int、string、HttpStatusCode无需显式地转换或封装你的Response——你只是返回你的参数,其他的Nancy会帮你完成。
    7. 一个强大的、轻量级的、测试框架帮助您验证您的应用程序。

 

  官方网站 : http://nancyfx.org/
  Github : https://github.com/NancyFx/Nancy

 

  1. 安装Nancy

    PM> Install-Package Nancy

    PM> Install-Package Nancy.Hosting.Aspnet //Nancy For Asp.net

    PM> Install-Package Nancy.Viewengines.Razor 

    注意:要安装三个Nancy相关的包。

      Nancy ,

      Nancy.Hosting.Aspnet ,  Nancy 的  Asp.net 环境

      Nancy.Viewengines.Razor  提供Razor视图支持,

 

  2. 创建一个空的MVC 项目, ASP.NET Hosting

 

  3. 定义一个Bootstrapper.cs 类,参考例子里面的bootstrapper.cs文件

    记得配置静态文件目录,Nancy 的路由机制,所有的请求包括静态文件,都得走路由。所以得在bootstrapper.cs 文件里面配置,否则,会访问不到。

  

 protected override void ConfigureConventions(Nancy.Conventions.NancyConventions nancyConventions)
   {
       base.ConfigureConventions(nancyConventions);
       nancyConventions.StaticContentsConventions.Add(Nancy.Conventions.StaticContentConventionBuilder.AddDirectory("/", "public"));
   }

    

    还有,cshtml 或者 html 的文件目录,也得在bootstrapper.cs 中配置,否则会报错找不到cshtml 文件。

    

 

  4. 创建一个Nancy Module
  

public class SampleModule : Nancy.NancyModule
{
  public SampleModule()
  {
    Get["/"] = _ => "Hello World!";
  }
}