C# .aspx javascript .ajax 自动完成文本框从 IIS 8 运行时返回 500 错误



好吧,经过一周的尝试,我在这里和其他地方能找到的一切来解决这个问题,我终于飘扬了投降的旗帜,并向我更有经验的伙伴开放。基本上,我有一个简单的内部网应用程序,它驻留在VMed Windows 2012 R2/IIS8服务器上,该服务器还托管SQL 2014(我知道,我知道(。我正在尝试在SQL表中的两个文本框上自动完成。在VS2017中,它工作得很好,但是当我尝试从IIS8运行它时,我收到"无法加载资源:服务器响应状态为500(内部服务器错误("错误。这是 HTML:

<script type="text/javascript">
$(function () {
$("#<%=txtSAPLoc.ClientID%>").autocomplete({
source: function (request, response) {
var param = { locName: $('#<%=txtSAPLoc.ClientID%>').val() };
$.ajax({
method: "POST",
url: "CdtCreateRecord.aspx/GetLoc",
data: JSON.stringify(param),
dataType: "json",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
response($.map(data.d, function (item) {
return {
value: item
}
}))
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
},
minLength: 2
});
});
$(function () {
$("#<%=txtSAPInst.ClientID%>").autocomplete({
source: function (request, response) {
var param = { instName: $('#<%=txtSAPInst.ClientID%>').val() };
$.ajax({
method: "POST",
url: "CdtCreateRecord.aspx/GetInst",
data: JSON.stringify(param),
dataType: "json",
contentType: "application/json; charset=utf-8",
dataFilter: function (data) { return data; },
success: function (data) {
response($.map(data.d, function (item) {
return {
value: item
}
}))
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
},
minLength: 2
});
});
</script>

以及背后的相关代码:

[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static List<string> GetLoc(string locName)
{
List<string> Loc = new List<string>();
string query = string.Format("SELECT DISTINCT loc FROM Locations WHERE loc LIKE '%{0}%'", locName);
using (SqlConnection con = new SqlConnection("Server=usmac2dgsyntax;Database=LREC_ADB;Trusted_Connection=Yes;"))
{
using (SqlCommand cmd = new SqlCommand(query, con))
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Loc.Add(reader.GetString(0));
}
}
}
return Loc;
}
[WebMethod]
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
public static List<string> GetInst(string instName)
{
List<string> Inst = new List<string>();
string query = string.Format("SELECT DISTINCT inst FROM Institutions WHERE inst LIKE '%{0}%'", instName);
using (SqlConnection con = new SqlConnection("Server=usmac2dgsyntax;Database=LREC_ADB;Trusted_Connection=Yes;"))
{
using (SqlCommand cmd = new SqlCommand(query, con))
{
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Inst.Add(reader.GetString(0));
}
}
}
return Inst;
}

这是我之前查阅的堆栈溢出文章的样本:

  • asp-net-500-internal-server-error-while-calling-webmethod-from-JavaScript
  • query-ajax-call-works-on-localhost-but-not-on-live-server
  • 500-internal-server-error-in-asp-net
  • jquery-ajax-post-results-in-500-internal-server-error

最后,我的问题的解决方案非常简单:设置远程调试后,我发现SQL身份验证错误反过来导致500内部服务器错误。在SQL中,我假设NT权威\网络服务帐户在相关数据库上具有正确的数据读取器/数据写入器权限,但从未分配过它们,因此在生产中存在身份验证错误和内部服务器错误。我解决了这个问题,现在一切正常。感谢您的提示。

最新更新