2 つのイントラネット サイトがあります。
http://intranetv1/
http://intranetv2/
v1 は .NET 1.1 に基づいており、v2 は .NET 3.5 に基づいています。
v1 で Web ページを作成し、jQuery を使用して v2 で作成した Web サービスにアクセスしようとしています。Web サービスは .NET 3.5 を使用してコーディングされているため、v1 でその Web サービスを使用することはできません。
とにかく、この場合は JSONP を使用することになっていると思いますが、ページを実行するたびに ajax 部分が機能せず、Google Chrome ではキャンセルのように 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 ファイルにアクセスしようとしています。
これを実行すると、Google Chrome で 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 デベロッパー ツールで表示されるエラー メッセージのスクリーンショットを次に示します
。
完全な解像度を表示するには、ここをクリックしてください。
.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"];
}
}
}