【发布时间】:2013-06-28 11:41:27
【问题描述】:
我有 2 个内部网站:
http://intranetv1/
http://intranetv2/
v1 基于 .NET 1.1,v2 基于 .NET 3.5
在 v1 上,我创建了一个网页,我正在尝试使用一些 jQuery 来访问我在 v2 上创建的 web 服务。由于 Web 服务是使用 .NET 3.5 编码的,因此我无法在 v1 上使用该 Web 服务。
无论如何,我假设我应该在这种情况下使用 JSONP,但是每次我运行页面时,ajax 部分都不起作用,在谷歌浏览器中,我只会收到 500 错误消息,如取消。
我不知道为什么会这样。
这是 v1 .NET 1.1 服务器上的 jQuery:
function selectedDateTime(strDate, strHours, strMinutes) {
$.ajax({
type: 'POST',
url: 'http://intranetv2/webservices/meetingrooms.asmx/GetDayCount',
data: '{ strMeetingDate:"' + strDate + " " + strHours + ":" + strMinutes + ":00" + '" }',
contentType: 'application/json; charset=utf-8',
dataType: 'jsonp',
success: function(department) {
alert("success");
},
error: function(xhr, status, error) {
alert("error");
}
});
return strDate + "---" + $("#txtDate").val();
}
如您所见,我正在尝试访问 v2 .NET 3.5 服务器上的 .asmx 文件。
当我运行它时,谷歌浏览器给我一个 500 服务器错误并说 asmx 文件已被取消,然后我收到一个警报,在 selectedDateTime 函数结束时显示日期警报。所以函数正在执行,但是ajax脚本的成功或错误部分根本没有被执行。
我收到以下回复:
Request URL:http://intranetv2/webservices/meetingrooms.asmx/GetDayCount?callback=jQuery110100248512071557343_1372419413424&{%20strMeetingDate:%2228/06/2013%2006:00:00%22%20}&_=1372419413425
Request Method:GET
Status Code:500 Internal Server Error
Request Headers
GET /webservices/meetingrooms.asmx/GetDayCount?callback=jQuery110100248512071557343_1372419413424&{%20strMeetingDate:%2228/06/2013%2006:00:00%22%20}&_=1372419413425 HTTP/1.1
Host: intranetv3
Connection: keep-alive
Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAHYAAAAYABgAjgAAABIAEgBIAAAABgAGAFoAAAAWABYAYAAAAAAAAACmAAAABYKIogUBKAoAAAAPQgBQAEMATwBMAEwASQBOAFMAaQB4AGYASQBYAEYALQBHAEIASgBUAEIAMgBKAJBkNIpqc7C+AAAAAAAAAAAAAAAAAAAAAIGOnhAoLt95s2HzXVTV7AvYOt1c9vbdJQ==
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
DNT: 1
Referer: http://intranetv1/meeting/meeting_room_bookings_2_1.aspx
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
Query String Parametersview sourceview URL encoded
callback:jQuery110100248512071557343_1372419413424
{ strMeetingDate:"28/06/2013 06:00:00" }:
_:1372419413425
Response Headers
HTTP/1.1 500 Internal Server Error
Date: Fri, 28 Jun 2013 11:36:57 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/plain; charset=utf-8
Content-Length: 406
这是我在 Google Chrome 开发人员工具中收到的错误消息的屏幕截图: Click here for full resolution.
这是 .asmx 代码:
[WebMethod()]
public double GetDayCount(string strMeetingDate)
{
string[] strDateAndTime = strMeetingDate.Split(' ');
string[] strStartDateParts = strDateAndTime[0].Split('/');
string[] srtStartTimeParts = strDateAndTime[1].Split(':');
int year = Int32.Parse(strStartDateParts[2]);
int month = Int32.Parse(strStartDateParts[1]);
int day = Int32.Parse(strStartDateParts[0]);
int hour = Int32.Parse(srtStartTimeParts[0]);
int min = Int32.Parse(srtStartTimeParts[1]);
int sec = Int32.Parse(srtStartTimeParts[2]);
DateTime meetingDate = new DateTime(year, month, day, hour, min, sec);
using (connection = new SqlConnection(ConfigurationManager.AppSettings["connString"]))
{
using (command = new SqlCommand("intranet.dbo.BusinessHours", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@meeting_date", SqlDbType.DateTime).Value = meetingDate;
connection.Open();
using (reader = command.ExecuteReader())
{
reader.Read();
return (double)reader["hours"];
}
}
}
【问题讨论】:
-
"As the webservices is coded using .NET 3.5, I can't have that webservices on v1."- 该陈述不正确。无论如何,500 错误表明服务器上出现了一些客户端不可见的错误。你在服务器上的错误处理告诉你什么? Web 服务中是否引发了任何异常?响应正文中是否有任何类型的错误消息返回? (您可能需要使用浏览器调试工具才能看到它。)另外,什么是“日期警报”?selectedDateTime()返回一个包含日期的字符串值,但它会在任何 AJAX 调用返回任何内容之前执行此操作。 -
添加了上面的响应头。警报只是客户端的事情,以查看是否实际到达了客户端脚本,并且确实如此。因为它显示日期。
-
是否有响应正文与标头一起使用?该正文是否包含错误消息?即使没有,服务器端错误处理说明了什么?请求是否在失败之前进入您的代码? 500 错误意味着服务器上出现了问题,因此可以找到最相关的诊断信息。至于有问题的警报,总是会到达,因为它发生在 AJAX 调用完成之前。所以“看看是否真的到达了客户端脚本”并没有多大意义,它告诉你的只是 JavaScript 可以工作。
-
我会在服务器的哪个位置查看?我正在使用 IIS6。
-
查看事件日志了解更多详情。