0

登録プロセスの一連の手順をユーザーに実行させるカスタム SharePoint 2010 Web パーツがあります。各ステップで、必要な入力が完了すると、ユーザーは標準のサーバー側ボタン コントロールである [続行] ボタンをクリックします。コード ビハインドは、更新されたセッション データで同じページを更新する Response.Redirect を呼び出す前に、いくつかの検証と DB の更新を行います。

(注: セッション データは、従来の Session オブジェクトではなく、暗号化されたクエリ文字列パラメーターとして URL に保持されます)

このソリューションは、単一サーバーのテスト環境では正常に機能しますが、負荷分散されたステージまたは運用環境に展開するとすぐに、[続行] をクリックした後、一部の要求が応答を受信せずにタイムアウトになります (ERR_TIMED_OUT)。

  1. Web パーツ ログは、Web パーツが実際に有効な URL を使用して Response.Redirect を呼び出していることを示しています。
  2. これはサーバー リソースの問題ではありません。タイムアウトは 1 分以上に設定でき、応答は受信されません。
  3. 負荷分散されたサーバーにデプロイされた場合にのみ発生します
  4. 負荷分散されたサーバーの 1 つで登録を完了すると、すべてが正常に機能します。これにより、負荷分散とサーバー セッションに問題があると思われます。NLB のサーバー ノードの 1 つから負荷分散された 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) { }
4

2 に答える 2

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 に問題があったため、ナビゲーションがフリーズしました。

彼らがどのように修正したかはわかりませんが、少なくとも問題は私のコンポーネントにはありませんでした.

于 2012-06-21T21:14:08.500 に答える
0

http://internalServer44/myUrlRequest.Url の 1 つの可能性は、外部から見える負荷分散された Ulr ( など) ではなく、特定のサーバーが url ( など) を参照する方法http://NlbFarmUrl/myUrlです。

SharePoint の場合、SPContext.Current.Site/Web プロパティを使用して Url のベース部分を取得することをお勧めします。これは、この Url が既に外部から見える形式になっている必要があるためです。

于 2012-06-20T02:30:27.580 に答える