Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.Net Viewstate超过了最大请求长度_C#_Asp.net_Iis 7_Viewstate - Fatal编程技术网

C# Asp.Net Viewstate超过了最大请求长度

C# Asp.Net Viewstate超过了最大请求长度,c#,asp.net,iis-7,viewstate,C#,Asp.net,Iis 7,Viewstate,我经常遇到一个导致我的Web应用程序崩溃的问题。客户端(浏览器)在向服务器发出一些(1个以上)请求后获得HTTP状态代码500。我打开了IIS失败请求跟踪并发现请求超出了最大请求限制: Maximum request length exceeded 我查看了隐藏的\uuu VIEWSTATE字段,发现它包含一些我期望的信息和一个神秘的(可能是base64编码的)序列化对象,包含49500个字符。我不知道为什么它这么大,并在我的代码中检查了会话和ViewState对象。但没什么可疑的 由于我正在

我经常遇到一个导致我的Web应用程序崩溃的问题。客户端(浏览器)在向服务器发出一些(1个以上)请求后获得HTTP状态代码500。我打开了IIS失败请求跟踪并发现请求超出了最大请求限制:

Maximum request length exceeded
我查看了隐藏的
\uuu VIEWSTATE
字段,发现它包含一些我期望的信息和一个神秘的(可能是base64编码的)序列化对象,包含49500个字符。我不知道为什么它这么大,并在我的代码中检查了会话和ViewState对象。但没什么可疑的

由于我正在显示2个ASP.NET图表和一个大数据表(5k行和大约20列),我进入了我的Web.Config文件,并将请求限制增加到

</system.web>
  <httpRuntime maxRequestLength="4194304"/>    
</system.web>

这相当成功,这意味着服务器在又一次请求失败后幸存下来,然后出现
OutOfMemoryException
,声称没有更多可用内存

到目前为止,我非常确定存储了一些(我指的是成吨的)不需要的、不必要的、很可能是未使用的对象。(描述内存泄漏的好方法;))


但在这一点上,我迷路了。在序列化ViewState之前,是否有任何方法可以查看它,并检查引用了什么类型的对象?我是否可以清除/删除/刷新ViewState/Session/负责此操作的任何内容,以获得不超过默认限制的干净序列化ViewState?

在服务器端:我们应该编写代码,以保证响应时间。我们可以遵循以下几点

1.尽量避免查看状态:如果不需要查看状态,请在页面级别禁用查看状态。禁用ViewState有很多级别

控件级别:我们可以为特定控件禁用ViewState

<asp:TextBox ID="TxtCustomerID" runat="server"  EnableViewState="false" />

终于找到了原因。显然,一个应用程序还将其内容存储在ViewState中,这导致回发请求大得离谱。(还有一些将数据推送到ViewState的遗留代码)

您的页面有多大?默认情况下,服务器控件的值存储在视图状态中(我相信),因此,除非您在页面级别或每个控件上禁用视图状态,否则我可以想象它会增长。。。但是很难相信您的视图状态会变得如此之大。如果您不需要ViewState,您是否尝试在GridView或DataTable上设置EnableViewState=“false”?我的页面包含5个下拉列表、6个文本框、3个单选按钮、ajax toolkit选项卡容器中的2个aps.net图表以及asp:literalBut中呈现的本机HTML表(我想)我需要查看状态。我有几个下拉列表依赖于另一个。因此,我将它们中的每一个都放在一个UpdatePanel中以更改值。现在尝试一下,看看这是否是问题所在。是数据太大还是问题来自其他方面。您可以试试这个网站,它将帮助您捕获我已经覆盖的异常
OnError
,即实现了
Application\u Error
,并在其中设置一些断点。但他们不是我的最后一件事:
<%@ Page Title="Customer" Language="C#" EnableViewState="false" %>
<location path="~/Docs">
     <system.web>
          <pages enableViewState="false"></pages>
     </system.web>
</location>
<pages enableViewState="false"></pages>