クライアント側で$.ajax()を使用してこれらのメソッドが呼び出されるページでwebMethodを作成しました。最初のWebmethodは、時間のかかるタスクに取り組んでいます。タスクの完了には8分以上かかります。最初のメソッドをajax呼び出しした直後に、別のWebメソッドを呼び出しています。これは1秒または2秒で終了します。したがって、2番目のWebMethodajax呼び出しからすぐに応答を取得する必要があります。ただし、ここでは、この場合、最初の呼び出しが終了するまで2番目のWebメソッドが実行されません。以下の例は、私のシナリオをシミュレートします。
[WebMethod]
public static string PullData(int snapshotId)
{
string str = "Pull Started: " + DateTime.Now.ToString() + "\n";
Thread.Sleep(30000);
str += "Pull End: " + DateTime.Now.ToString();
return new JavaScriptSerializer().Serialize(str);
}
[WebMethod]
public static string CheckStatus(int snapshotId)
{
return new JavaScriptSerializer().Serialize("Check Status" + DateTime.Now.ToString());
}
以下は、ボタンクリック時のJavascript呼び出しです。
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function pullData(){
$.ajax({ type: 'POST',
url: 'Default.aspx/PullData',
data: '{ snapshotId: 101 }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
var curMsg = $("#message").attr("innerHTML") + "<br />";
$("#message").attr("innerHTML", curMsg + msg.d);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
}
});
CheckStatus();
return false;
}
function CheckStatus() {
//alert("this is check status");
$.ajax({ type: 'POST',
url: 'Default.aspx/CheckStatus',
data: '{ snapshotId: 101 }',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
var curMsg = $("#message").attr("innerHTML") + "<br />";
$("#message").attr("innerHTML", curMsg + msg.d);
},
error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR.responseText);
}
});
return false;
}
</script>
上記の呼び出しでは、PullDataメソッドが応答を返す前に、CheckStatusメソッドが応答を返す必要があります。ただし、PullDataがジョブを終了した後にCheckStatusが実行されます。
私はここで行方不明になっているか、完全な動作に気付いていない可能性があります。助けてください!!!
誰かがこの問題に遭遇しましたか?