2

由于您的建议,此问题已得到解决。详情见底部。非常感谢您的帮助!

我们的 ASP.NET 网站可从多个特定且高度安全的国际位置访问。它一直运行良好,但我们添加了另一个客户端位置,该位置表现出非常奇怪的行为。

特别是,当用户输入搜索条件并单击搜索按钮时,结果列表返回空。它甚至不显示“返回的 0 个结果”文本,因此就像 Repeater 控件根本没有绑定一样。类似的行为出现在网站的其他部分(但不是全部)中。用户可以正常登录网站并显示他们的个人资料信息。

我已经使用与他们完全相同的凭据在本地登录了该站点,并且该站点从这里运行良好。我们已经仔细完成了这些步骤,所以我相信这不是用户问题。

我在第一次加载时将搜索结果绑定在搜索结果页面的Page_Load中(条件在查询字符串中)。IE

if (!IsPostBack) {
  BindResults();
}

通过注释掉 BindResults() 方法调用,我可以在本地复制完全相同的行为。

有人知道 IsPostBack 的值是如何计算的吗?他们高度安全的防火墙设置是否有可能导致 IsPostBack 始终返回 true,即使它是来自另一个页面的重定向?这可能是一个转移注意力的问题,因为问题可能出在其他地方。它确实复制了结​​果。

我无法访问该站点,因此故障排除仅限于向他们提供说明并要求他们告诉我结果。

谢谢你的时间!

附加信息:客户端位于运行默认规则的 Microsoft ISA 2006 防火墙后面。该站点已添加到 Internet Explorer 受信任站点列表中,并在 FireFox 和 Google Chrome 中进行了尝试,所有结果都相同。

解决方案:对我来说,获胜者是使用 Fiddler 的建议。多么出色的工具,任何 Web 开发人员都不应该没有。使用它,我能够从请求中删除各种标头,直到我重现问题为止。实际上有两个因素导致了这个错误,就像这种令人困惑的问题经常发生的情况一样。

因素一——Web 应用程序尽可能使用所有主流浏览器都支持的 GZIP 压缩。防火墙正在剥离指定 GZIP 解压缩支持的标头(Accept-Encoding: gzip, deflate)。

因素二——我的代码中的一个错误意味着在发送未压缩的内容时绕过了某些处理。这个问题之前没有注意到,因为该应用程序被有限的受众使用,所有这些应用程序都支持 GZIP 解压缩。

4

7 回答 7

3

如果他们精通技术,我会让他们下载 Fiddler 或类似的东西,捕获整个 HTTP 会话,然后将保存的会话发送给您。也许里面的东西会突出。

同时,看看您是否可以安装 ISA Server(如果必须的话,可以安装评估版,或者如果您有或认识任何有 sub 的人,请从 MSDN 安装),看看您是否可以在本地复制它。

于 2008-12-02T04:36:00.713 回答
1

客户端是否有可能禁用了 Javascript 并且没有获取 _EVENTTARGET 表单值?

于 2008-12-02T03:21:23.827 回答
1

它可能是某种代理,它根据给定的 POST 请求创建 GET 请求......

我不确定 IsPostBack 是如何计算的,但我的猜测是它会检查 HTTP 请求以查看它是 POST 还是 GET ......

于 2008-12-02T03:57:26.500 回答
1

哦耶。这绝对不是“_EVENTTARGET”顺便说一句...

我知道这一点,因为Ra-Ajax不会将任何这些参数传递给服务器,并且它们(Ra-ajax 请求)被作为 IsPostBack 请求处理......

于 2008-12-02T03:59:03.423 回答
1

您能否创建一个测试帖子页面来传递与您的搜索页面相同的内容,并在 Page_Load 中写回所有帖子以确保它们通过,特别是 __VIEWSTATE。

foreach (string key in Request.Form)
{
    Response.Write("<br>" + key + "=" + Request.Form[key]);
}

然后让其中一位用户转发他们在该测试页面上看到的内容。

编辑:有文档表明某些防火墙可能会破坏 VIEWSTATE 以及一些绕过它的方法:查看状态概述

于 2008-12-02T14:39:52.833 回答
1

地点,地点,地点。检查用户的文化。通常这会导致问题。

于 2008-12-02T14:48:43.177 回答
1

检查 IIS 日志以查看请求是否甚至发送到您的服务器。ISA 设置可能正在缓存初始请求并在后续请求中提供该请求。

于 2008-12-02T15:59:01.210 回答