我们遇到了一个非常奇怪的问题,我们还没有能够诊断出来。我们的应用程序有许多特定的ASP.NET MVC操作失败,因为缺少必需的参数:
每个请求都是HTTP POST,因此我们期望看到表单数据。在某些情况下,应该有十几个变量。
我们使用ELMAH收集Web应用程序中的错误,并通过此工具通常可以查看请求失败时发布的实际表单数据。但是,在这些特定的错误中,当应该有多个变量时,整个表单都不见了!
我们无法按需重现此问题。但是,由于我们的应用程序中的流量很大,因此我们每天会看到这些错误数十次。用户也无法重现该错误,并且在Web浏览器中尝试相同的操作第二次可以正常工作。
我们也不确定数据丢失的位置。它是否在Web浏览器中?在IIS管道内部?还是ASP.NET MVC将其转储?完全不确定。
如果有人能帮助我们排除故障和/或诊断此问题,我们将不胜感激。
更新1:我们发现HTTP标头中指定的内容长度大小表明请求中有一些内容。但是,请求的表单集合为空(根据ELMAH)。因此,我们添加了一些额外的日志记录,以跟踪接收到的实际内容长度和内容本身。
更新2:我们发现虽然CONTENT_LENGTH HTTP头的大小是正确的(对于类似的请求),但内容本身确实缺失。流中不包含任何字节。
我们还能够将问题缩小到Internet Explorer,我们似乎无法在其他浏览器中出现这种情况。
我们有时可以通过在浏览器中引起多个重叠的AJAX请求,然后刷新或重定向来重新创建问题。几乎可以认为Internet Explorer在完全写出流缓冲区之前关闭了连接。
我们无法使用Fiddler跟踪此问题。使用Fiddler,似乎无法重新创建特定情况。
更新3:我们所看到的一切都可以通过这个解释:为什么Internet Explorer在Ajax调用失败后不发送HTTP post body?
The parameters dictionary contains a null entry for parameter 'myVariable' of non-nullable type... etc
每个请求都是HTTP POST,因此我们期望看到表单数据。在某些情况下,应该有十几个变量。
我们使用ELMAH收集Web应用程序中的错误,并通过此工具通常可以查看请求失败时发布的实际表单数据。但是,在这些特定的错误中,当应该有多个变量时,整个表单都不见了!
我们无法按需重现此问题。但是,由于我们的应用程序中的流量很大,因此我们每天会看到这些错误数十次。用户也无法重现该错误,并且在Web浏览器中尝试相同的操作第二次可以正常工作。
我们也不确定数据丢失的位置。它是否在Web浏览器中?在IIS管道内部?还是ASP.NET MVC将其转储?完全不确定。
如果有人能帮助我们排除故障和/或诊断此问题,我们将不胜感激。
更新1:我们发现HTTP标头中指定的内容长度大小表明请求中有一些内容。但是,请求的表单集合为空(根据ELMAH)。因此,我们添加了一些额外的日志记录,以跟踪接收到的实际内容长度和内容本身。
更新2:我们发现虽然CONTENT_LENGTH HTTP头的大小是正确的(对于类似的请求),但内容本身确实缺失。流中不包含任何字节。
我们还能够将问题缩小到Internet Explorer,我们似乎无法在其他浏览器中出现这种情况。
我们有时可以通过在浏览器中引起多个重叠的AJAX请求,然后刷新或重定向来重新创建问题。几乎可以认为Internet Explorer在完全写出流缓冲区之前关闭了连接。
我们无法使用Fiddler跟踪此问题。使用Fiddler,似乎无法重新创建特定情况。
更新3:我们所看到的一切都可以通过这个解释:为什么Internet Explorer在Ajax调用失败后不发送HTTP post body?