Правильный формат даты и времени для веб-службы - PullRequest
7 голосов
/ 10 июля 2009

У меня есть веб-сервис с методом, который вызывается через объект xmlhttprequest в моем javascript. Метод принимает параметр datetime, который впоследствии преобразуется в строку и запускается для базы данных, чтобы выполнить вычисление.

Я получаю значение из m_txtDateAdd и отправляю xmlHttprequest

<asp:textbox id=m_txtDateAdd tabIndex=4 runat="server" Width="96px" Text="<%# Today %>">
</asp:textbox>

, к которому прикреплен валидатор

<asp:CustomValidator id="m_DateAddValidator" runat="server" ErrorMessage="Please Enter a Valid Date" ControlToValidate="m_txtDateAdd">&#x25CF;</asp:CustomValidator>

Мой веб-метод выглядит примерно так

[WebMethod]
public decimal GetTotalCost(DateTime transactionDate)
{
    String sqlDateString = transactionDate.Year+"/"+transactionDate.Month+"/"+transactionDate.Day;

Я использую sqlDateString как часть командного текста, который я отправляю в базу данных. Это унаследованное приложение и встроенный SQL, так что у меня нет свободы устанавливать хранимую процедуру, создавать и назначать параметры в моем коде. Это работает в 90% случаев. Веб-сервис вызывается при событии onchange m_txtDateAdd. Время от времени я получаю ответ от сервера

System.ArgumentException: невозможно преобразовать 25/06/2009 в System.DateTime. System.ArgumentException: невозможно преобразовать 25/06/2009 в System.DateTime.

Имя параметра: тип ---> System.FormatException: строка не была распознана как допустимый DateTime.

   at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
   at System.DateTime.Parse(String s, IFormatProvider provider)
   at System.Convert.ToDateTime(String value, IFormatProvider provider)
   at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
   at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
   at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
   at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
   at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

Ответы [ 4 ]

11 голосов
/ 10 июля 2009

Вам необходимо отправить DateTime в правильном формате для XML: 2009-07-10T12: 40Z. От http://en.wikipedia.org/wiki/ISO_8601.


Кроме того, почему вы используете HttpRequest? Почему бы просто не использовать Add Service Reference?

4 голосов
/ 01 августа 2012

2001-10-26T19: 32: 52Z

Используйте такой формат.

0 голосов
/ 30 марта 2010

Передаете ли вы значение String из текстового поля непосредственно в веб-службу? Было бы более надежным проанализировать введенную пользователем строку String в объект Date javascript, передать объект Date веб-службе и позволить сериализатору в библиотеке ajax Microsoft выяснить, как его отформатировать.

Может быть полезно увидеть код JavaScript на стороне клиента, который получает значение и вызывает веб-сервис.

0 голосов
/ 10 июля 2009

Как вы создаете DateTime для передачи в GetTotalCost ()?

Есть ли у вас правильная перегрузка конструктора от http://msdn.microsoft.com/en-us/library/system.datetime.aspx?

...