Gewusst wie: übergeben Sie ein TimeSpan-Objekt, um eine WCF-Methode verwenden JSON

Ich versuche einen Weg zu finden, rufen Sie eine WCF-Methode unter Verwendung von JSON und geben Sie eine Zeitspanne als parameter, aber ich erhalte immer ein "Bad request" Antwort vom service.

Hier ist ein snippet-code service-Schnittstelle:

 [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
    TimeSpan GetTimeSpan(TimeSpan value);

Service-Aufruf:

  String method = "GetTimeSpan";
  String result = null;

  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + method);
  request.KeepAlive = false;
  request.Method = WebRequestMethods.Http.Post;
  request.ContentType = "application/json";

  JsonSerializer serializer = new JsonSerializer();

  TimeSpan ts = new TimeSpan(23, 59, 59);
  String jsonString = JsonConvert.SerializeObject(ts);


  String data = jsonString;      //jsonString = "23:59:59"
  //I have already tryed with {"value": "23:59:59"} and the result is the same, bad request.
  request.ContentLength = data.Length;

  StreamWriter writer = new StreamWriter(request.GetRequestStream());
  writer.Write(data);
  writer.Close();

  WebResponse response = request.GetResponse();
  StreamReader reader = new StreamReader(response.GetResponseStream());
  result = reader.ReadToEnd();
  response.Close();

Dies ist nur ein Beispiel. Beim Anruf einer service-ohne Zeitspanne, funktioniert alles einwandfrei. Ich brauche, um es zu arbeiten, um zu halten die Kompatibilität mit anderen clients, die das konsumieren des Dienstes in der typischen Art und Weise.

Antwort:

Dem remote server hat einen Fehler zurückgegeben: (400) Bad Request.

Bin ich vorbei an der falschen Zeitspanne json Repräsentation? Oder gibt es eine Möglichkeit zu definieren, wie zum Deserialisieren der Zeitspanne, wenn der service die Anfrage verarbeitet?

Vielen Dank im Voraus

  • TimeSpan kann nicht serialisiert werden. Wahrscheinlich doppelte von stackoverflow.com/questions/3232701/...
  • diese Frage wurde über WCF auf .NET 3.5 (mit VS2008 so eine ziemlich gute Vermutung). Vielleicht hat sich geändert, seit .NET 4.0? Vielleicht OP klären könnte .NET-version?
InformationsquelleAutor Bonomi | 2011-08-24
Schreibe einen Kommentar