从js到webservice的异步调用背后的动作/目的是什么?

时间:2011-10-19 13:37:27

标签: .net ajax

我有一些来自很久以前的工程师的代码。 它通常是从js到ASP.NET webservice的调用。

js的核心是:

var url1="WebService.asmx";
xmlhttp.open("POST", url1, false);
xmlhttp.setRequestHeader("Content-Type","text/xml;charset=gb2312");

var url2="http://mysite.com/save";
xmlhttp.setRequestHeader("SOAPAction", url2);

xmlhttp.send(data);

var result;
var resultTxt;
result = xmlhttp.status;
returnTxt = xmlhttp.responseText;

xmlhttp = null; 
if(result==200) { 
    if(returnTxt.indexOf("save succeeded")>-1)
        return "succeeded"
}
return "failed";

webservice的核心是:

using (SqlConnection conn = new SqlConnection(connectionString))
{
    SqlCommand cmd = new SqlCommand(sqlSelectString, conn);
    IAsyncResult ASynResult;
    SqlDataReader dr;
    try
    {
        conn.Open();
        ASynResult = cmd.BeginExecuteReader(CommandBehavior.CloseConnection);
        while (!ASynResult.IsCompleted)
        {
            ASynResult.AsyncWaitHandle.WaitOne(3000, true);
        }
        dr = cmd.EndExecuteReader(ASynResult);
        value = "save succeeded!!";
    }
    catch
    {
        value = "save failed!!";
    }
}

我的问题是:

1这是异步还是同步?

2为什么在网络服务中使用IAsyncResult

1 个答案:

答案 0 :(得分:0)

它使用异步命令,但等待它实际上是同步的。我不确定最初的意图是什么。有充分的理由让Web服务利用IAsyncReqult模式与IIS需要使用的线程有关,但这不是这样做的方法。我不确定它是否与当前版本的IIS存在问题。这是一个旧的link到它的一些信息,但可能有更多的现有信息。