【问题标题】:Response.Redirect timeout in NLB environmentNLB 环境中的 Response.Redirect 超时
【发布时间】:2012-06-20 01:18:49
【问题描述】:

我有一个自定义 Sharepoint 2010 Web 部件,它让用户完成注册过程中的一系列步骤。在每一步,当任何需要的输入完成时,用户单击继续按钮,这是一个标准的服务器端按钮控件。后面的代码在调用 Response.Redirect 之前会进行一些验证和数据库更新,后者会使用更新的会话数据刷新同一页面。

(注意:会话数据作为加密查询字符串参数保存在 URL 中,而不是常规的 Session 对象)

此解决方案在我的单服务器测试环境中运行良好,但一旦我将其部署到负载平衡阶段或生产环境,一些请求就会在单击继续 (ERR_TIMED_OUT) 后简单地超时而没有收到响应。

  1. Webpart 日志显示 Webpart 实际上正在使用有效 URL 调用 Response.Redirect
  2. 这不是服务器资源问题。超时时间可以设置为一分钟或更长时间,没有收到任何响应。
  3. 仅在部署到负载平衡服务器时发生
  4. 当我在其中一个负载平衡服务器上完成注册时,一切正常 - 这让我相信负载平衡和服务器会话存在问题。我知道,当从 NLB 中的一个服务器节点与负载平衡的 Web 应用程序交互时,所有请求都将发送到该特定服务器。

我知道我以前遇到过类似的问题,但那是几年前的事了,我不记得解决方案是什么了。

        try
        {
            // get clean URL without query string parameters
            string url;
            if (string.IsNullOrEmpty(Request.Url.Query))
                url = Request.Url.AbsoluteUri;
            else
                url = Request.Url.AbsoluteUri.Replace(Request.Url.Query, "");

            // add encrypted serialized session object
            url += "?" + Constants.QueryStringParameterData + "=" + SessionData.Serialize(true);

            _log.Info("Redirecting to url '" + url + "'..");
            Response.Redirect(url);
        }
        catch (Exception) { }

【问题讨论】:

  • 不确定你是如何加密会话数据的,但是 IIRC 一些加密方法依赖于“机器密钥”,如果你场中的所有服务器都不相同,那么其他服务器就不会能够阅读它。这是视图状态,但同样适用 - codinghorror.com/blog/2004/11/…

标签: c# sharepoint web-parts nlb


【解决方案1】:

好的,问题已解决。

原来是 UAG 在后台做某事,而我发现它的方式是触发回发的链接从

http://some_url.com/sites/work/al2343/page.aspx

http://some_other_url.domain.com/uniquesigfed6a45cdc95e5fa9aa451d1a37451068d36e625ec2be5d4bc00f965ebc6a721/uniquesig1/sites/work/al2343/page.aspx

(注意里面的“uniquesig”)

这是浏览器实际尝试重定向到的 URL,但由于 UAG 的任何问题,导航冻结。

我不知道他们是如何解决的,但至少问题不在我的组件中。

【讨论】:

    【解决方案2】:

    Request.Url 的一种可能性是特定服务器如何查看 url(类似于 http://internalServer44/myUrl)而不是外部可见的负载平衡 Ulr(例如 http://NlbFarmUrl/myUrl)。

    如果是 SharePoint,最好使用 SPContext.Current.Site/Web 属性来获取 Url 的基本部分,因为此 Url 应该已经是外部可见的形式。

    【讨论】:

    • 你可能正在做某事......我会试一试!谢谢!
    • 请求被重定向到负载平衡的域名 (siteurl/page.aspx/data=querystringdata),但可能会发生一些我看不到的事情。 SPContext.Current.x 都给出了与 Request.Url 相同的 URL,所以我不认为它会有所作为,不幸的是..
    • 没有更多的想法。如果您重定向请求实际上从浏览器到达服务器,请检查日志文件...
    • 重定向响应是从服务器发送的,在 Fiddler 中,客户端收到了一些东西,但响应数据为空(Body -1,未定义内容类型)。猜猜浏览器会忽略它并继续等待真正的响应.. PS:这是通过 VPN 隧道运行的,不确定是否与它有关。
    • 重定向(302 响应)预计不会有正文。问题是对 302 中指定位置的请求是否真正到达服务器(似乎不是)。如果 302 是最后一次成功响应,请尝试手动导航到 302 中指定的位置(可能在新的浏览器会话中)......我会尝试看看它是否发生在较少的移动部件(即没有 VPN......)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 2017-06-23
    相关资源
    最近更新 更多