0

System.DateTime入力パラメーターとして .NET 値を受け入れる次の JSON WCF サービスを作成しました。

[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json)]
ReclaimedH2OMetric GetCurrentReclaimedH2OMetric(System.DateTime currentDate);

Web ページで使用jQueryしてサービスを利用しようとすると、次のエラーが発生します。

サーバーでリクエストの処理中にエラーが発生しました。例外メッセージは「SqlDateTime オーバーフローです。1753 年 1 月 1 日午前 12:00:00 から 9999 年 12 月 31 日午後 11:59:59 の間でなければなりません。

ここに私のjQueryコードがあります:

var rawResults;
var currentDate = new Date('10/1/2012');
var jsonDate = '\\/Date(' + currentDate.getTime() + ')\\/';

$.ajax(
{
    async: false,
    type: "GET",
    contentType: "application/json; charset=utf-8",
    url: "http://www.mydomain.com/Dashboard_WaterResources/WCFService/Dashboard.svc/GetCurrentReclaimedH2OMetric",
    dataType: "json",
    data: '{"currentDate": "' + jsonDate + '"}',
    success: function (results) {
        rawResults = results;
    },
    error: function (xhr) {
        alert(xhr.responseText);
    }
});

次のコード行は、この質問を参照としてvar jsonDate = '\\/Date(' + currentDate.getTime() + ')\\/';使用して、適切な JSON 形式で日付をフォーマットしようとしていました。

4

2 に答える 2

0

オブジェクトlongではなくデータ型を受け入れるように、WCF サービス シグネチャを変更しました。System.DateTime

また、 jQuery 呼び出しのdataプロパティをフォーマットする方法に問題がありました。ajax機能した更新されたコードは次のとおりです。

var rawResults;
var currentDate = new Date('10/1/2012 12:00 AM');
var jsonDate = ConvertDateToTicks(currentDate);

$.ajax(
{
    async: false,
    type: "GET",
    contentType: "application/json; charset=utf-8",
    url: "http://localhost/Dashboard_WaterResources/WCFService/Dashboard.svc/GetCurrentReclaimedH2OMetric",
    data: { dateInTicks: jsonDate },
    success: function (results) {
        rawResults = results;
    },
    error: function (xhr) {
        alert(xhr.responseText);
    }
});
于 2013-05-29T17:44:38.630 に答える
0

jsonDate 内の整数は、エポックからのミリ秒数である必要があります。

JavaScript 日付オブジェクトをティックに変換する方法

または、Moment.jsを使用してミリ秒を取得することを検討してください。

于 2013-05-29T16:04:29.020 に答える