Я определил два вызова веб-сервисов в ASP.NET:
1.BeginLengthyProcedure и EndLengthyProcedure (асинхронный веб-метод)
2.LengthProcedureSync
namespace ServiceDemo
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class AsyncWebService : System.Web.Services.WebService
{
public delegate string LengthyProcedureAsyncStub(int milliseconds);
public string LengthyProcedure(int milliseconds)
{
System.Threading.Thread.Sleep(milliseconds);
return "SuccessAsync";
}
public class MyState
{
public object previousState;
public LengthyProcedureAsyncStub asyncStub;
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public IAsyncResult BeginLengthyProcedure(int milliseconds, AsyncCallback cb, object s)
{
LengthyProcedureAsyncStub stub = new LengthyProcedureAsyncStub(LengthyProcedure);
MyState ms = new MyState();
ms.previousState = s;
ms.asyncStub = stub;
return stub.BeginInvoke(milliseconds, cb, ms);
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string EndLengthyProcedure(IAsyncResult call)
{
MyState ms = (MyState)call.AsyncState;
string res = ms.asyncStub.EndInvoke(call);
return res;
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string LengthyProcedureSync(int milliseconds)
{
System.Threading.Thread.Sleep(milliseconds);
return "SuccessSync";
}
}
}
Затем я использовал их с помощью JQuery, я не хочу использовать ASP.NET AJAX. LengthProcedureSync работал нормально, но LenghtyProcudure не работал. Я что-то пропустил?
<script type="text/javascript" src="jquery-1.4.4.min.js"></script>
<script type="text/javascript">
function testJson() {
$.ajax({
type: "POST",
//Didn't work
url: "AsyncWebService.asmx/LengthyProcedure",
//Work
//url: "AsyncWebService.asmx/LengthyProcedureSync",
data: "{'milliseconds':'2000'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
$("#jsonResponse").html(msg.d);
},
error: function (msg) {
}
});
};
</script>