我有一些来自很久以前的工程师的代码。 它通常是从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
?
答案 0 :(得分:0)
它使用异步命令,但等待它实际上是同步的。我不确定最初的意图是什么。有充分的理由让Web服务利用IAsyncReqult模式与IIS需要使用的线程有关,但这不是这样做的方法。我不确定它是否与当前版本的IIS存在问题。这是一个旧的link到它的一些信息,但可能有更多的现有信息。