gpt4 book ai didi

c# - 从 jquery 调用异步 .NET 4.5 Web 服务

转载 作者:行者123 更新时间:2023-11-30 22:19:52 25 4
gpt4 key购买 nike

我正在尝试了解如何从 jquery 1.9.1 调用使用异步/等待的 .net 4.5 Web 服务 (asmx)。js代码很经典:

$.ajax({
type: "POST",
url: "ws/UpdCategory",
data: strData,
async: true,
contentType: "application/json; charset=utf-8",
dataType: "json",
complete: saveCategory_onComplete
});

ws.cs中的web服务,ws.asmx背后的代码:

[WebMethod]
public async Task<int> UpdCategory(string jsonData)
{
JsonGenericResponse objWmJson = new JsonGenericResponse();
objWmJson.IsInError = "true";
try
{
JavaScriptSerializer objJss = new JavaScriptSerializer();
Dictionary<string, string> objDict = objJss.Deserialize<Dictionary<string, string>>(jsonData);
DataIfCloudEspresso objData = new DataIfCloudEspresso();
//
StringBuilder objBuilder = new StringBuilder();
objBuilder.Append("<?xml version=" + (char)39 + "1.0" + (char)39 + " encoding=" + (char)39 + ConfigurationService.XMLEncoding + (char)39 + "?>");
objBuilder.Append("<Category>");
.....various fields
objBuilder.Append("</Category>");
// the row below call the method on Data Access Layer
int updatedCount = await objData.UpdCategory(objBuilder.ToString());
return updatedCount;
}
}

最后是 DAL 方法:

public async Task<int> UpdCategorieArticoli(string xmlData)
{
try
{
using (SqlConnection objConn = new SqlConnection(base.ConnectionString))
{
using (SqlCommand cmdADO = new SqlCommand("spUpd_Category", objConn))
{
cmdADO.Parameters.Add(new System.Data.SqlClient.SqlParameter("@XMLDoc", SqlDbType.Text));
cmdADO.Parameters["@XMLDoc"].Value = xmlData;
cmdADO.Parameters.Add(new System.Data.SqlClient.SqlParameter("@RETURN_VALUE", SqlDbType.Int));
cmdADO.Parameters["@RETURN_VALUE"].Direction = ParameterDirection.ReturnValue;
//
cmdADO.CommandType = CommandType.StoredProcedure;
//
await objConn.OpenAsync().ConfigureAwait(false);
return await cmdADO.ExecuteNonQueryAsync().ConfigureAwait(false);
}
}
}
catch (Exception)
{
throw;
}
finally
{
}
}

问题是这样的:例如,从 Page_Load 调用 DAL 方法时没有问题;相反,当从 Web 服务(从 javascript 调用)调用时,代码卡在等待 cmdADO.ExecuteNonQueryAsync() 行上。

我想问题是来自客户端的上下文切换(来自浏览器的 js 代码)和在服务器上工作的背后代码,我不明白如何解决这个问题。我尝试了谷歌搜索发现的各种代码,但没有解决方案。

显而易见的范围是最大限度地使用异步代码以获得最佳性能。

我曾尝试编写带有回调的旧式 BeginExecuteNonQuery,但我还没有找到如何将结果从 EndExecuteNonQuery 传递给调用 Web 服务的解决方案。

最佳答案

根据对 的评论 Is it possible to use async/await in webmethod asmx service ,ASMX 根本不支持 async。这就是为什么您的代码不起作用的原因。它也与 jQuery 异步无关。

关于c# - 从 jquery 调用异步 .NET 4.5 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15328817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com