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