前提・実現したいこと
割とレガシーな環境(既存の保守という意味)で、C#MVC(他サーバーへの通信含む)、jQueryで作られたサイトの開発をしております。
Webページで非同期通信で読み込み中のコンテンツがある状況で、その読み込みを待たずに別の画面への遷移ボタンを押して画面遷移をさせたいです。
発生している問題
コンテンツの読み込みが完了しきるまで、画面遷移など通信を挟む処理が動作しません。(静的な部分は動作します)
状況
上記Webページの一部コンテンツの取得が20秒を超える遅さで、この非同期処理が終わる前に、画面に準備されてる他画面へ移動するボタンを押した際、サーバーサイドのC#のコードが完了するまで、画面が移動できない状況となっております。
(そもそも遅い部分の改善の話は別に進めてる為、この話の中では無しでお願いします)
試したこと
他のサイトを参考に、他画面へ遷移する為のボタンに、非同期処理をキャンセルするものを組み込んでみました。
保持しておいたjqXHRのabort()を組みこみ、ブラウザのF12開発機能のネットワークを、監視して、abortが飛んでるのも確認しました。
その上で、サーバーサイドのGetResponse()している同期処理部分で、処理待ちが発生してしまい、中断を拒む状況を生んでいます。
試しにサーバーサイドもざっくりで非同期処理に変えてみましたが、返却したい情報の部分を参照(Task.Result)することで、結局ブロックされてしまうように感じました。
質問
javascriptの非同期キャンセルを組み込んでも、サーバーサイド側でも何らかの対処を入れないと、処理は中断できないのでしょうか
補足情報
クライアントサイド
対応ブラウザ IE11
Javascript Ajax通信周り
jqXHR=$.ajax({
url: 'とあるurl'
type: 'GET',
dataType: 'json',
....
}).done(function(data) {
....
サーバーサイド
C# MVC周り
クライアント要求後、
サーバーサイドにて
他サーバーのHTTP通信を挟みます。
HttpWebRequest.GetResponse()でブロック。
サーバ1、サーバ2の間で待ち合わせが発生。
非同期処理なので、ブラウザ側は一部コンテンツに、実装されているローディングアイコンが表示され、本来の表示を待っている状況。
browzer ->|
通信1-> [IISServer]ASP.NET MVC/C#(サーバ1) ->|
通信2-> Othrer Server(REST API)(サーバ2)
回答1件
あなたの回答
tips
プレビュー