如今,ASP.NET 广泛用于需要处理数百万用户并部署在负载平衡的 Web 场中的高流量 Web 应用程序。 ASP.NET 的一个重要部分是许多应用程序使用的视图状态。 ASP.NET View State 是一种非常强大的机制,可以在客户端和 Web 服务器的多个 HTTP 请求之间存储页面、控件和自定义值。
ASP.NET View State 值存储在页面上的隐藏字段中并编码为 Base64 字符串。 一个 ASP.NET View State 看起来像这样:
1 2 3 |
<input id="__VIEWSTATE" type="hidden" name="__VIEWSTATE" value="/wEPDwUJNzg0MDMxMDA1D2QWAmYPZBYCZg9kF…" /> |
虽然很有用, ASP.NET View State 经常变得非常大,尤其是在 ASP.NET 应用程序在页面上有网格控件和许多其他控件的情况下。 这被添加到您的 HTTP 请求和响应中,并且确实将您的 ASP.NET 响应时间减慢到无法忍受的水平。
沉重的另一个缺点 ASP.NET View State 是增加的带宽使用会大大增加您的带宽成本。 例如,如果对于每个 HTTP 请求,您最终会附加 60-100k ASP.NET View State 数据,只需将其乘以事务总数,您就会很快看到带宽消耗会增加多少成本。
最后,在某些情况下,将机密数据作为 ASP.NET View State. 在发送之前对其进行加密也很昂贵。
要解决所有这些问题,您可以缓存 ASP.NET View State 在 Web 服务器上并分配一个 GUID 作为其在缓存中的键。 然后,此 GUID 在隐藏字段中发送到浏览器,并与下一个 HTTP 请求一起返回并用于获取相应的 ASP.NET View State 从缓存中。 这减少了您发送到浏览器的有效负载,这不仅提高了 ASP.NET 响应时间,还大大降低了您的带宽消耗成本。
如果您的 ASP.NET 应用程序在负载平衡的 Web 场中运行,那么您必须使用分布式缓存。 像 ASP.NET 缓存这样的独立缓存不起作用。 NCache 是一种企业级分布式缓存,提供 ASP.NET View State 缓存模块. 为了使用它,您无需进行任何编程。 只需修改您的 ASP.NET web.config 即可。
以下是使用步骤 NCache 用于缓存 ASP.NET View State:
- 在 ASP.NET 应用程序中创建一个 app.browser 文件。 在目录 App_browsers 下创建它。 在 app.browser 文件中插入页面适配器,如下所示:
123456<browser refID="Default"><controlAdapters><adapter controlType="System.Web.UI.Page"adapterType="Alachisoft.NCache.Adapters.PageAdapter"/></controlAdapters></browser> - 然后在 web.config 文件的编译部分添加以下程序集引用。
1234567<compilation defaultLanguage="C#" debug="true"><assemblies><add assembly="Alachisoft.NCache.Adapters,Version=1.0.0.0,Culture=neutral,PublicKeyToken=cff5926ed6a53769"/></assemblies></compilation> - 在 web.config 文件中注册您的配置部分。
12345678910<configSections><sectionGroup name="ncContentOptimization"><section name="settings"type="Alachisoft.NCache.ContentOptimization.Configurations.ContentSettings"allowLocation="true" allowDefinition="Everywhere"/></sectionGroup></configSections> - 在 web.config 文件(上面注册的)中为您的配置部分指定设置。
1234567891011<ncContentOptimization><settings enableMinification="true"enableViewstateCaching="true"groupedViewStateWithSessions="true"viewstateThreshold="0"enableTrace="true"><cacheSettings cacheName="mycache"><expiration type="Sliding" duration="300"/></cacheSettings></settings></ncContentOptimization> - 最后,在 web.config 的 HttpHandlers 部分注册 HTTP 处理程序,如下所示:
1234567<add verb="GET,HEAD" path="NCResource.axd"validate="false"type="Alachisoft.NCache.Adapters.ContentOptimization.ResourceHandler,Alachisoft.NCache.Adapters, Version=1.0.0.0,Culture=neutral,PublicKeyToken=cff5926ed6a53769"/>
配置后 NCache,您可以看到 ASP.NET View State 在您的应用程序中标记为:
1 2 3 4 5 6 7 |
< input type="hidden" name="__NCPVIEWSTATE" id="__NCPVIEWSTATE" value="vs:cf8c8d3927ad4c1a84da7f891bb89185" /> < input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="" /> |
请注意,添加了另一个隐藏标签 ASP.NET View State. 它包含分配给的唯一键 ASP.NET View State 您的页面,在您的分布式缓存中。 所以每当你的应用服务器需要 ASP.NET View State value 它可以很容易地从缓存中获取它。
这样,您将看到 ASP.NET 响应时间的性能显着提升,并且带宽消耗成本也显着降低。
请探索更多关于 ASP.NET View State 通过尝试缓存 NCache ASP.NET View State 自己模块。
您可以使用 NCache 用于 Azure 存储 Microsoft Azure ASP.NET 应用程序的 ASP.NET 会话状态。 这是一个解释 Microsoft Azure 会话存储选项及其原因的博客 NCache 在 Microsoft Azure 的所有可用选项中,for Azure 是最好的。
https://20.200.20.123:86/storing-asp-net-session-state-in-a-microsoft-azure-distributed-cache/
有人成功使用 Windows Azure 缓存(预览版)来处理会话状态吗?