非同期ポストバックを多用するASP.NET AJAXでの安全策

ASP.NET AJAXを多用したページで非同期ポストバックを送り続けているような場合にポストバック要求->レスポンス待機中にブラウザの×ボタンで画面を閉じられてしまうと、要求がサーバー側に残ってしまう場合がある。
その状態で同プロセスの別ブラウザ(例: 親画面等)から要求をサーバへ送ると、要求が全く受け付けられなくなってしまう場合があった。 ※その時、画面は真っ白になる

そのようにしたくない場合、下記のような対応策が考えられる 。

対応案1. ページのアンロード時に必ず非同期ポストバックをキャンセルするように実装する

<script type="text/javascript"> 
    function pageUnload()
    {
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.abortPostBack();
    }
</script>

参照記事:

非同期ポストバックのキャンセル – MSDNオンライン
http://msdn.microsoft.com/ja-jp/library/bb398789.aspx

対応案2. 最初から中断可能なタスクとしてロジックを設計する

参照記事:

Cutting Edge: ASP.NET AJAX を使用してサーバー タスクをキャンセルする – MSDN マガジン
http://msdn.microsoft.com/ja-jp/magazine/cc163380.aspx

 

“X-MicrosoftAjax”ヘッダー / ASP.NET AJAX の Firewall環境での利用設定

ASP.NET AJAXでは、HTTP通信のリクエストヘッダーに
X-MicrosoftAjax
を利用している。

ファイアウォールを使用しているネットワーク環境で
・「未定義のHTTPヘッダーを破棄する」
・「未定義のHTTPヘッダーをブロックする」
のような設定がある場合、うまくAjaxが動作しない場合がある。

その場合は
① 上記設定を解除する
又は
② X-MicrosoftAjaxヘッダーを登録して定義する
必要がある。

ASP.NET: ScriptManager コントロールを使用して Web アプリケーションで AJAX を利用する
http://msdn.microsoft.com/ja-jp/magazine/cc163354.aspx

ASP.NET AJAX ページには、ScriptManager コントロールのインスタンスを 1 つ含める必要があります。このコントロールが ASP.NET AJAX ページの中枢になります。ページを必要なフレームワーク スクリプト ファイルにリンクして、AJAX ポストバックの発生を検出すると部分的なレンダリングを調整します。ScriptManager コントロールは、要求の HTTP ヘッダーをチェックして、その要求が AJAX ポストバックであるかどうかを判断します。

参照記事:

[ASP.NET AJAX]UpdatePanelコントロール利用時の注意点とは?[2.0のみ、C#、VB] - @IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/672aspajaxasyncpost/aspajaxasyncpost.html

Firewall configuration breaking ASP.NET AJAX? What are my options? – ASP.NET Forums
http://forums.asp.net/p/1144748/1850717.aspx