4

DateTimeJSON エンコーディングを使用して WCF RESTful サービスを介して公開されているメソッドにパラメーターとして aを送信しようとしています。リクエストは次のようになります。

POST http://IP:PORT/LogService/json/GetLogEntriesByModule HTTP/1.1
Content-Length: 100
Content-Type: application/json
Host: IP:PORT
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
Expect: 100-Continue

{"maxentries":10,"upperdate":"1280703601462","lowerdate":"1277938801462","module":"Windows Service"}

私はいくつかのフォーマットを試しましたDateTime

  • 2010-07-01T10:54:00(これはWCFTestClientアプリケーションによって NET.TCP 経由で送信され、結果を取得します。
  • \/Date(12345678+0100)\/
  • 01.07.2010 10:54:00

メソッド定義:

LogEntry[] GetLogEntriesByModule(
    string module,
    DateTime lowerDate,
    DateTime upperDate,
    int maxEntries,
    out bool maxEntriesReached
)

私はいつも次の応答を受け取ります。

HTTP/1.1 200 OK
Content-Length: 60
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 02 Jul 2010 09:07:04 GMT

{"GetLogEntriesByModuleResult":[],"maxEntriesReached":false}

DateTimeその時の Llog にいくつかのエントリがあるため、 が正しく解析されていないようです。

これを行う方法を知っている人はいますか?

更新: 問題はサーバー側にあり、解決されました。

4

4 に答える 4

7

日付を WCF サービスに送信するための正しい形式は次のとおりです。 /Date(53244000000)/ ここで、括弧内の数字は 1970 UTC 午前 0 時からのミリ秒数です。

Date dt = new Date();
long date = Date.UTC(dt.getYear(), dt.getMonth(), dt.getDay(), dt.getHours(),dt.getMinutes(), dt.getSeconds());
String senddate = "/date("+date+")/";

そして、以下のように使用します

inputparam.put("DateTime", datetime);
于 2011-03-01T11:35:36.997 に答える
2

これが誰かを助ける場合に備えて:

Microsoft によると、WCF はQueryStringConverterを使用して URL の解析を行います。したがって、次のコードを使用します (msdn の例をわずかに変更):

QueryStringConverter converter = new QueryStringConverter();
if (converter.CanConvert(typeof(DateTime)))
{
    string strValue = converter.ConvertValueToString(DateTime.UtcNow, typeof(DateTime));
    Console.WriteLine("the value = {0}", strValue);
}

DateTime REST パラメータの適切な形式を取得します: 2010-01-01T01:01:01Z

あなたがこの形式を試したことを読みましたが、これが実際に動作するはずの方法であることを確認したかっただけです。これを検索したときにこの質問が最初に出てきたので、答えようと思いました。

これは、.NET 4.0を使用して私にとってはうまくいきました

于 2010-10-26T03:49:22.183 に答える