Проблема с передачей дат методу веб-сервиса (переполнение SqlDateTime) - PullRequest
0 голосов
/ 20 июля 2009

У меня есть решение VS2008, содержащее два проекта: веб-сервис (фактическая работа, которую я выполняю) и веб-приложение (которое я использую для тестирования сервиса). Последний имеет «веб-ссылку» на первый. Он также устанавливается в качестве запускаемого проекта, поэтому при запуске отладки VS настраивает два порта на локальном хосте, один для приложения (который запускает свой default.aspx) и один для службы.

Сервисный код в events.asmx.cs имеет следующий код:

public class events : System.Web.Services.WebService
{
    /* various object classes specific to service */

    [WebMethod]
    public List<EventItem> GetEvents(DateTime From, DateTime To, string[] EventType)
    {

        EventsDataContext dc = new EventsDataContext();
        List<EventsMain> events = dc.EventsMains
            .Where(ev => ev.EventStartDate >= From
                && ev.EventEndDate < To
                && ev.Live == true
                && ev.IsOnWebsite == true
            )
            .ToList();

    }
}

Предполагается, что последний параметр (EventType) в настоящее время не используется.

Класс EventsMain взят из контекста данных и представляет собой таблицу, которая содержит целую загрузку полей, из которых в этом случае запрос LINQ оценивает значения пары полей BIT и двух полей DATETIME. Предполагается вернуть список событий на основе предоставленных критериев.

В веб-приложении у меня есть этот код в выделенном коде default.aspx для вызова вышеуказанного метода:

protected void Page_Load(object sender, EventArgs e)
{
    events eventService = new events();
    DateTime from = new DateTime(2009, 1, 1, 10, 0, 0);
    DateTime to = new DateTime(2009, 2, 1, 10, 0, 0);
    EventItem[] eventList = eventService.GetEvents(from, to, new string[] { });
}

Последняя строка (которая вызывает метод webservice) завершается с ошибкой:

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

При отладке, прямо перед вызовом метода webservice, переменные DateTime выглядят нормально. Вступая в метод, еще до оператора LINQ параметры From и To оказались в виде C # DateTime.MinValue, что, очевидно, намного ниже минимального значения datetime в SQL Server.

Изменение переменных from и to на другие даты перед вызовом метода, похоже, не имеет никакого эффекта.

Итак, вопрос в том, что я сейчас делаю неправильно, и что должен делать, чтобы эти даты корректно пересекали интерфейс веб-службы?

1 Ответ

2 голосов
/ 20 июля 2009

Возможно ли, что вы немного изменили интерфейс вашего метода и не обновили веб-ссылку? Похоже, вы переименовали параметры From и To, но все еще используете устаревший прокси-класс.

Попробуйте обновить веб-ссылку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...