我有一个独立的.ASPX页面(后面没有代码),它包含一个我通过JQuery Ajax调用的简单WebMethod。见下文:
(请注意,这是概念验证代码,而不是生产代码!)
<!DOCTYPE html>
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html>
<head runat="server">
<title>Untitled</title>
<script runat="server" type="text/c#">
[System.Web.Services.WebMethod]
public static int GetData(int Id)
{
string connectionString = "Data Source=xxx;Initial Catalog=xxx;User Id=xxx;Password=xxx;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
string query = "SELECT AVG(Number) FROM Data WHERE ID = @Id;";
using (SqlCommand command = new SqlCommand(query, connection))
{
command.Parameters.AddWithValue("@Id", Id);
connection.Open();
return (int)command.ExecuteScalar();
}
}
}
</script>
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
function getAvg() {
$.ajax({
type: 'POST',
url: "WebMethodAjaxExample.aspx/GetData",
data: JSON.stringify({Id: $('#tbId').val()}),
contentType: 'application/json',
success: function (data, textStatus) {
$('#theParagraph').text(data.d);
}
})
}
</script>
</head>
<body>
<div>
<input type="text" id="tbId" />
<button onclick="getAvg()">Go</button>
</div>
<p id="theParagraph"></p>
</body>
</html>
我理智地检查了SQL查询并知道它返回FLOAT(七位一位)。但是,正如您所看到的,我的WebMethod返回一个int。因此,我的页面总是将数字四舍五入。
我决定将WebMethod返回类型和ExecuteScalar转换更改为Double。但页面仍然返回“7”。
经过一些修补,我学到的最有趣的事实是,当我决定将C#代码中的WebMethod名称更改为GetDatum时,也对JQuery Ajax函数名称进行了相关更改,这次运行页面我从Ajax调用中获取返回状态500,并将“未知Web方法”作为错误消息。
感觉就像页面没有像我预期的那样动态重新编译,而是它仍然使用缓存版本,即使请求标头声明“no-cache”。
如果有任何帮助,该页面将在Sharepoint 2010中托管。
有人能理解发生了什么吗?
更新:回收应用程序池可使最新的WebMethod代码正常工作,但在重新设置应用程序池之前,不会反映进一步的更新。
答案 0 :(得分:0)
我从另一个答案中抓住了这个,我似乎找不到链接,但你不需要重置整个应用程序池!我有一个ASMX文件,它使用AJAX从Web服务中提取数据。我疯了,因为更新Web服务并没有改变网页所带来的数据。
在你的代码页面加载后添加它,它将清除缓存并使用新更新的Web服务:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.Now);
Response.Cache.SetNoServerCaching();
Response.Cache.SetNoStore();
这正是我所需要的,但我认为我真的只需要SetExpires
行来清除此页面的缓存。