毎回異なるIPで数回呼び出されるjquery-ajaxがあります。次に、jquery-ajax は、ping の実行を担当する mvc4 コントローラーでアクションを呼び出し、結果を返します。
Internet Explorer 開発ツールから、すべての ping 要求が保留中としてマークされ、1 つずつ処理されることに気付きました。1 つの ping 要求が処理されると、キュー内の次の要求が処理されます。何が起こるかというと、最後の ping 要求が突然自動的にキャンセル/中止/拒否されます。各 ping 要求は 4 回の再試行で構成され、各再試行は 5 秒のタイムアウトで行われます。ただし、再試行ごとに短いタイムアウトを設定すると、たとえば、5 秒ではなく 750 ミリ秒に設定すると、すべてが完全に機能します。最後の ping リクエストが自動的にキャンセルされる理由を知りたいのですが... 最後の ping リクエストは、サービスが提供されるまでに「長い」時間がかかるため、拒否されているようです。
必要に応じて、ここにコードを投稿できます。お知らせください。
私はjquery-1.10.2を使用しています
更新しました:
ajax({
url: "/Tests/Ping/",
data: { IPAddress: IP },
type: 'POST',
dataType: 'json'
}).then(function (data) {
// Do some stuff on success
},
function (data) {
// Do some stuff on error
// here I am receiving for last ping requests:
// readyState: 0
// responseText: ""
// status: 0
// statusText: "error"
});
コントローラーでのアクション:
[HttpPost]
public ActionResult Ping(string IPAddress)
{
(...)
System.Net.NetworkInformation.Ping pinger = new System.Net.NetworkInformation.Ping();
(...)
string data = new String('a', 32);
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 5000;
for (int i = 0; i < 4; i++)
{
reply = pinger.Send(IPAddress, timeout, buffer);
(...)
}
(...)
Response.ContentType = "application/json;charset=utf-8";
Response.StatusCode = (int)(packetsLost < 4 ? HttpStatusCode.OK : HttpStatusCode.NotFound);
return new JsonResult()
{
Data = new
{
sent = 4,
received = 4- packetsLost,
lost = packetsLost,
percentLost = (int)(packetsLost / 4* 100)
}
}
}
(...) はより多くのコードを意味することを確認してください。また、「then」の成功またはエラー セクションに jquery-ajax 呼び出しを強制的に入力するために、http ステータス コードと json オブジェクトを返す必要があります。このコードは、多くの ping 要求に対して正常に機能していますが、前述のように、前回とまったく同じように正常に実行された最後の ping 要求は、キャンセル/中止/拒否としてマークされます。