ASP.NET View State 是一种客户端状态管理机制,用于保存页面和控件值。 ASP.NET View State 是页面上的隐藏字段,作为编码的 Base64 字符串。 它作为每个响应的一部分发送给客户端,并由客户端作为回发的一部分返回给服务器。
1 2 3 4 5 6 7 8 9 10 |
<input id="__VIEWSTATE" type="hidden" name="__VIEWSTATE" value="wEPDwUJNzg0MDMxMDA1D2QWAmYPZBYCZg9kFgQ CQ9kFgICBQ9kFgJmD2QWAgIBDxYCHhNQcm2aW91c0NvbnRyb2xNb2RlCymIAU1pY3 Jvc29mdC5TaGFyZVBvaW50LldlYkNvbnRyb2xzLlNQQ29udHJbE1vZGUsIE1pY3Jv 29mdC5TaGFyZVBvaW50LCBWZXJzaW9uPTEyLjAuMC4wLCBDdWx0dXJlPW5ldXRyWw sIFB1YmxpY0tleVRva2VuPTcxZTliY2UxMTFlOTQyOWMBZAIDD2QWDgIBD2QWBgUm Z19lMzI3YTQwMF83ZDA1XzRlMjJfODM3Y19kOWQ1ZTc2YmY1M2IPD2RkZAUmZ18yN DQ3NmI4YV8xY2FlXzRmYTVfOTkxNl8xYjIyZGYwNmMzZTQPZBYCZg8PZBYCHgVjbG DQWBgUmZ19lMzI3YTQwMF83ZDA1XzRlMjJfODM3Y19kOWQ1ZTc2YmY1M2IPD2...."/> |
问题与 ASP.NET View State 在微软 Azure
ASP.NET View State 对于部署为 web/worker 角色的应用程序来说,这是一个非常重要的特性 微软 Azure 缓存. 但是,视图状态会带来一些问题,您需要了解和解决这些问题才能充分利用它。
首先, ASP.NET View State 变得非常大,尤其是当您的 Microsoft Azure ASP.NET 应用程序在其页面上有很多繁重的控件时。 这会导致大量视图状态有效负载在每个请求上在浏览器和您的应用程序之间来回传输。 繁重的视图状态负载会降低性能并导致额外的带宽消耗,尤其是当平均 ASP.NET View State 最终达到 100 千字节,并且在您的 Microsoft Azure 应用程序中处理了数百万个此类请求。
ASP.NET View State 在将机密数据作为视图状态的一部分发送给客户端时,这也是一个安全风险。 这些数据容易受到攻击,并且可以被攻击者篡改,这是一个严重的安全威胁。
解决方案 ASP.NET View State 问题
你可以解决 ASP.NET View State 通过存储实际的 Microsoft Azure 应用程序中的问题 ASP.NET View State 在分布式缓存中的服务器端,并且永远不会将其与请求有效负载一起发送回浏览器。
NCache for Azure 是用于 Microsoft Azure 的极其快速且可扩展的分布式缓存。 它允许您存储实际 ASP.NET View State 在服务器端的分布式缓存中,而是在请求有效负载中向客户端发送一个小令牌作为视图状态。 这大大减少了请求有效负载的大小。 然后在服务器端使用 View State 令牌来查找正确的 ASP.NET View State in NCache 用于回发上的 Azure 分布式缓存。 较小的有效负载解决了与性能和带宽利用率相关的问题,因为您不再处理 Microsoft Azure 应用程序中每个请求的巨大视图状态。 而且,View State 存储在服务器端的 NCache Azure 分布式缓存永远不会暴露给客户端,因此它解决了上述安全问题。
这是一个使用令牌代替的示例 ASP.NET View State NCache 对于 Azure ASP.NET View State 提供者:
1 2 |
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="cf8c8d3927ad4c1a84dsadfgsdsfdsda7f891bb89185" /> |
运用 NCache 对于 Azure ASP.NET View State 高速缓存
步骤1: 在 App_browsers 目录中创建一个 app.browser 文件。 在 app.browser 文件中插入页面适配器,如下所示:
文件:App_browsersapp.browser
1 2 3 4 5 6 |
<browser refID="Default"> <controlAdapters> <adapter controlType="System.Web.UI.Page" adapterType="Alachisoft.NCache.Adapters.PageAdapter" /> </controlAdapters> </browser> |
步骤2: 在 web.config 文件的编译部分添加以下程序集引用。
文件:web.config
1 2 3 4 5 6 |
<compilation defaultLanguage="c#" debug="true" targetFramework="4.0"> <assemblies> <add assembly="Alachisoft.NCache.Adapters, Version=1.0.0.0, Culture=neutral, PublicKeyToken=CFF5926ED6A53769"/> </assemblies> </compilation> |
步骤3: 注册 NCache 用于 web.config 文件中的 Azure 配置部分。
文件:web.config
1 2 3 4 5 6 7 |
<configSections> <sectionGroup name="ncContentOptimization"> <section name="settings" type="Alachisoft.NCache.ContentOptimization.Configurations.ContentSettings" allowLocation="true" allowDefinition="Everywhere"/> </sectionGroup> </configSections> |
步骤4: 在 web.config 文件(上面注册的)中为您的配置部分指定设置。 这些设置控制 NCache 对于 Azure ASP.NET View State 缓存功能。
文件:web.config
1 2 3 4 5 6 7 8 9 |
<ncContentOptimization> <settings viewstateThreshold="12" enableViewstateCaching="true" enableTrace="false" groupedViewStateWithSessions="false" <cacheSettings cacheName="myCache" maxViewStatesPerSession="3"> <expirationtype="Absolute" duration="1"/> </cacheSettings> </settings> </ncContentOptimization> |
结论
NCache for Azure 为您的 Microsoft Azure 应用程序提供无代码更改选项来存储 ASP.NET View State 在分布式缓存中的服务器端。 NCache 对于 Azure ASP.NET View State 提供商通过减少请求负载和带宽消耗来优化性能,同时解决与客户端视图状态相关的安全问题。
下载 NCache Open Source 并在 Microsoft Azure 上运行它。
你说得对 NCache 将原始字符串发送到 ASP.NET。
就视图状态不缓存而言,您的特定于您的环境的配置一定有问题。 我们将很快通过您注册的电子邮件地址向您发送一封电子邮件,以协调并进一步帮助您。
Hi
我已经配置了你在文章中描述的所有步骤,但是,视图状态字符串没有改变,也没有变小,主要思想是 ncache 用他自己的字符串替换字符串,然后, ncache 在执行的时候会将原始字符串传递给asp.net,我错了吗?
请告诉我,我怎样才能获得更多信息,或者是否可以获得远程协助?
我很高兴你这么想。
默认, NCache 将所有 ViewStates 无限期地保存在缓存中,无论回发的时间有多晚。 因此,所有视图状态请求都将由缓存处理。
另一方面,您还可以将时基到期(绝对或滑动)与 ViewState 相关联,并将该值设置得足够高以避免缓存未命中,即使在很长的回溯时间之后也是如此。
您还可以将 ViewState 与 NCache 会议。 这样,当从缓存中删除用户会话时,所有相关的 ViewStates 都会自动删除。 这有助于避免缓存上的额外内存负载,为您提供最佳性能。
NCache 听起来确实很有用。
在页面中的视图状态的情况下,即使在很长一段时间后也可以将页面回发而不会产生任何影响。
如何 NCache 处理这种情况?