我有一个自定义的Sharepoint 2010 Web部件,它通过注册过程中的一系列步骤来运行用户。在每一步,当完成所需的输入时,用户单击继续按钮,这是标准的服务器端按钮控件。后面的代码在调用Response.Redirect之前进行了一些验证和数据库更新,它使用更新的会话数据刷新同一页面。
(注意:会话数据作为加密查询字符串参数保存在URL中,而不是传统的Session对象)
此解决方案在我的单一服务器测试环境中运行良好,但只要我将其部署到负载平衡阶段或生产环境,某些请求会在单击Continue(ERR_TIMED_OUT)后立即超时而不会收到响应。
我知道我之前遇到过类似的问题,但几年前我已经记不起解决方案了。
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) { }
答案 0 :(得分:1)
好的,问题已经解决了。
原来是UAG在后台做了一些事情,我发现它的方式是触发回发的链接从
改变了http://some_url.com/sites/work/al2343/page.aspx
到
(注意那里的“uniquesig”)
这是浏览器实际尝试重定向到的URL,但由于UAG的问题,导航冻结了。
我不知道他们是如何解决的,但至少问题不在我的组件中。
答案 1 :(得分:0)
Request.Url的一种可能性是特定服务器如何看到网址(类似http://internalServer44/myUrl
),而不是外部可见的负载均衡的Ulr(如http://NlbFarmUrl/myUrl
)。
对于SharePoint,最好使用SPContext.Current.Site/Web属性来获取Url的基本部分,因为此Url应该已经是外部可见的形式。