将.aspx站点从服务器A移动到服务器BI时,发现其中一个页面上的AJAX GET请求未按预期在服务器B上运行。有问题的页面发出三个AJAX GET请求,另外两个请求这三项工作。最后一个请求会获取最大量的数据但它会失败。检查谷歌浏览器中的页面显示状态为200,但查看响应选项卡,我可以看到结束括号']}'缺少JSON数据。同一个呼叫虽然在服务器A上完美运行。两个服务器上的页面都在同一个地方请求相同的信息,服务器A的响应看起来像这样[' [{此处的信息}]'虽然服务器B的响应看起来像这样[{此处的信息'。虽然对于服务器B的响应如果信息足够小就可以工作,但是有一个问题。这让我觉得它是一个字符/数据限制,但在web.config文件中有这样的:
<webServices>
<jsonSerialization maxJsonLength="50000000"/>
</webServices>
以下是两台服务器的规格以及上一次AJAX GET请求的响应标头图片。
服务器A:
Windows Server 2008 R2 Standard(Service Pack 1)。
IIS 7.5.7600.16385
服务器B:
Windows Server 2012 R2 Datacenter。
IIS 8.5.9600.16384
这也是电话的样子:
var ajax = $.ajax({
url: "/page.aspx?Action=GetInformation",
datatype: "json",
type: "GET",
data: {
userID: userID
}
})
修改
以下是该网站使用的一些c#代码。
获取请求的页面内。
if (Action == "GetMyProjects")
{
String userID = Request.QueryString["userID"];
List<Project> projectList = SQL.getMyProjects(userID);
HTMLUtills.sendAsJSON(projectList, Context);
}
SQL.cs
public static List<Project> getMyProjects(String _userId)
{
List<Project> myProjects = new List<Project>();
int proNum = 0;
String proDes = "";
int busID = 0;
String busName = "";
int conID = 0;
String conTitle = "";
String confName = "";
String conlName = "";
String proStatus = "";
ParameterCollection parameterCollection = parameterCollection = new ParameterCollection();
parameterCollection.Add("@userID", Convert.ToString(_userId));
SqlDataReader sqlDataReader = (SqlDataReader)runStoredProcedure(SQL.runspType.Reader, "ALL_Projects_For_You", parameterCollection, "EACRMDBConnectionStringArmData02");
if (sqlDataReader.HasRows)
{
while (sqlDataReader.Read())
{
proNum = 0;
proDes = "";
busID = 0;
busName = "";
conID = 0;
conTitle = "";
confName = "";
conlName = "";
proStatus = "";
if (!sqlDataReader.IsDBNull(4)) { proNum = sqlDataReader.GetInt32(4); } else { }
if (!sqlDataReader.IsDBNull(5)) { proDes = sqlDataReader.GetString(5); } else { }
if (!sqlDataReader.IsDBNull(6)) { busID = sqlDataReader.GetInt32(6); } else { }
if (!sqlDataReader.IsDBNull(7)) { busName = sqlDataReader.GetString(7); } else { }
if (!sqlDataReader.IsDBNull(8)) { conID = sqlDataReader.GetInt32(8); } else { }
if (!sqlDataReader.IsDBNull(9)) { conTitle = sqlDataReader.GetString(9); } else { }
if (!sqlDataReader.IsDBNull(10)) { confName = sqlDataReader.GetString(10); } else { }
if (!sqlDataReader.IsDBNull(11)) { conlName = sqlDataReader.GetString(11); } else { }
if (!sqlDataReader.IsDBNull(13)) { proStatus = sqlDataReader.GetString(13); } else { }
Project tempProject = new Project(proNum, proDes, busID, busName, conID, conTitle, confName, conlName, proStatus);
myProjects.Add(tempProject);
}
}
sqlDataReader.Close();
return myProjects;
}
HTMLUtills.cs
public static void sendAsJSON(Object _object, HttpContext _httpContext)
{
string json = getAsJSON(_object);
_httpContext.Response.Clear();
_httpContext.Response.ContentType = "application/json";
_httpContext.Response.AddHeader("content-disposition", "attachment; filename=export.json");
_httpContext.Response.AddHeader("content-length", json.Length.ToString());
_httpContext.Response.Flush();
_httpContext.Response.Write(json);
_httpContext.Response.End();
_httpContext.Response.Close();
}