Я пытаюсь найти способ вызвать метод WCF с использованием JSON и передать параметр TimeSpan в качестве параметра, но я всегда получаю ответ «Плохой запрос» от службы.
Вот интерфейс службы кода фрагмента:
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
TimeSpan GetTimeSpan(TimeSpan value);
Сервисный звонок:
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();
Это всего лишь пример. При звонке на сервис без TimeSpan все работает нормально. Мне нужно привести его в порядок, чтобы обеспечить совместимость с другими клиентами, которые обычно используют сервис.
Ответ:
Удаленный сервер возвратил ошибку: (400) Неверный запрос.
Я передаю неверное представление TimeSpan json? Или есть способ определить, как десериализовать TimeSpan, когда служба обрабатывает запрос?
Заранее спасибо