• 第四章 设计程序架构 之 状态管理


    1. 概述

      本章内容包括 如何选择状态管理架构、考虑扩展性、使用cookie和本地存储保存状态、web.config中的配置 以及 实现sessionless状态。

    2. 主要内容

      2.1 选择状态管理架构

        ① 首先需要考虑的问题是,你是否真的需要保存状态。无状态使得站点可以处理更多的并发访问。

        ② web forms 中有多种方式保存状态。最主要的就是ViewState。使用隐藏域来实现状态信息的传递。

        ③ MVC4程序中,状态信息可以保存在以下位置:Cache、Session、Cookies、QueryString、Context.Items、Profile。

        ④ 可以通过继承 SessionStateStoreProviderBase 类来自定义session管理。

      2.2 考虑扩展性

        ① 相对于传统的ASP.NET,ASP.NET MVC 可以创建简洁干净的Html输出。可以更好的适配需要html交互的环境。

        ② 可以使用 OutProc,  StateServer,  SQLServer session 或者 sessionless 方案。

          web farm中,可以使用OutProc方案。

          sessionless方案使用,取决于状态信息保存在哪里。保存在客户端,需要额外的客户端编码,并且需要检查浏览器的版本(是否支持)。

          保存在服务端的典型案例是Profile的使用。里面保存了授权用户的信息。

        ③ ASP.NET MVC4 提供了支持可扩展性的多个特性。通过Routing和Model捕获,提供了对sessionless的支持。

         还可以把各层封装成独立的组件,在各个服务器间公用。

      2.3 使用cookies或者本地存储来保存状态信息

        cookies是HTML5 Web Storage的前身,HTML5 的 web storage API,可以提供更简洁方便的操作。

        HTML5 web storage 提供了 sessionStorage 和 localStorage 两个对象供使用。

        sessionStorage可以在同一域名的网页间传递保存的数据,前提是浏览器窗口没有关闭。

        localStorage 可以在同一域名的网页间传递保存的数据,作用域更大。不受浏览器窗口的限制。

        The HTML5 Web Storage API 还支持事件。可以在localStorage信息变化时通知注册事件的多个页面。不会通过服务端。

        浏览器兼容是需要考虑的问题,可以在服务端和客户端都放置检测代码。

      2.4 在web.config中配置

    <system.web> 
        <sessionState mode="InProc" cookieless="false" timeout="20" 
            sqlConnectionString="data  
            source=127.0.0.1;Trusted_Connection=yes" 
            stateConnectionString="tcpip=127.0.0.1:42424"   
        /> 
    </system.web>
    <system.web> 
        <sessionState mode="StateServer" 
           stateConnectionString="192.168.1.103:42424" /> 
    </system.web>
    <profile defaultprovider="DefaultProfileProvider"  
        inherit="MyApplication.Models.CustomProfile"/>

       2.5 实现sessionless状态

        sessionless状态 指的是 在不支持任何session模式的情况下保存状态。

         ASP.NET MVC 4 中在请求间传递信息的几种方式:

        ① 用户第一次访问时,在服务端创建并保存,然后传递。

        ② 使用隐藏域保存并传递。

        ③ 可以在布局页或者母版页中创建,在内容页中共享。

        ④ 添加Javascript方法保存信息。只要确保需要的时候添加了引用。就不用担心信息会丢失。

        ⑤ 在查询字符串(query string)中保存信息。

        ⑥ 在Url中保存信息。

    3. 总结

      ① 状态管理是软件程序的重要组成部分。因为http的无状态天性,增加了web程序中的状态管理的难度。

          ASP.NET MVC4中提供了多种方案供选择。

      ② session是保存状态最常用的一种方式。session可以被配置为保存在sqlserver或者独立的状态服务器上,还可以配置为将sessionid放到cookie中或者作为query string 的一部分。 

      ③ query string 也是一个可以保存状态信息的地方。适用于安全性要求不高的,数据量较小的情况。

      ④ 也可以把状态信息完全保存在客户端。使用HTML5 Web Storage API。但是ASP.NET MVC4 对JQuery的支持要更好。

      ⑤ 扩展性也是影响状态保存方案的主要因素。

  • 相关阅读:
    SharePoint 2019
    SharePoint 2019 图文安装教程
    SharePoint 2016 服务器部署(七)SharePoint 和OOS 集成
    如何将域中的AD数据导入SharePoint
    SharePoint 2016 图文安装教程 后面有激活序列号、密钥分享
    Github上优秀的.NET Core项目
    SQL Server删除/创建复制订阅失败,报15517错误问题的处理
    vue-devtools 开发工具的安装
    laravel 查询数据toArray内层无法转换的问题
    KindEditor 增加html标签
  • 原文地址:https://www.cnblogs.com/stone_lv/p/4671185.html
Copyright © 2020-2023  润新知