C# 响应。NLB环境中的重定向超时

C# 响应。NLB环境中的重定向超时,c#,sharepoint,web-parts,nlb,C#,Sharepoint,Web Parts,Nlb,我有一个定制的Sharepoint 2010 web部件,可以让用户在注册过程中执行一系列步骤。在每个步骤中,当完成所需的输入时,用户单击Continue按钮,这是一个标准的服务器端按钮控件。代码在调用Response.Redirect之前会执行一些验证和数据库更新,它使用更新的会话数据刷新同一页面 (注意:会话数据作为加密的查询字符串参数保存在URL中,而不是由常规会话对象保存) 此解决方案在我的单服务器测试环境中运行良好,但一旦我将其部署到负载平衡阶段或生产环境中,一些请求就会超时,而在单击

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

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

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

  • Web部件日志显示Web部件实际上正在调用响应。使用有效URL重定向
  • 这不是服务器资源问题。超时时间可以设置为一分钟或更长,但不会收到响应
  • 仅在部署到负载平衡服务器时发生
  • 当我在其中一台负载平衡的服务器上完成注册时,一切都正常,这让我相信负载平衡和服务器会话存在问题。我知道,当从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) { }
    

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


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

    好的,问题已经解决

    原来是UAG在后台做了一些事情,我发现触发回发的链接从

    (注意其中的“uniquesig”)

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


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

    您可能发现了一些问题。。。我要试一试!谢谢请求被重定向到负载平衡的域名(),但可能有一些我看不到的事情正在发生。SPContext.Current.x都提供了与Request.URL相同的URL,所以我认为这不会有什么不同,不幸的是……没有更多的想法。如果重定向请求实际从浏览器到达服务器,请检查日志文件……重定向响应从服务器发送,在Fiddler中,客户端接收到一些内容,但响应数据为空(Body-1,未定义内容类型)。我猜浏览器会忽略它并一直等待真正的响应。。PS:这是通过VPN隧道运行的,不确定这是否与此有关。重定向(302响应)不应有正文。问题是对302中指定的位置的请求是否实际到达了服务器(看起来不是)。如果302是最后一个成功响应,请尝试手动导航到302中指定的位置(可能在新浏览器会话中)。。。我会尝试查看移动部件是否较少(即没有VPN…),不确定如何加密会话数据,但IIRC某些加密方法依赖于“机器密钥”,如果服务器场中的所有服务器都不相同,则其他服务器将无法读取。这是viewstate,但同样适用-