У меня есть решение 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
на другие даты перед вызовом метода, похоже, не имеет никакого эффекта.
Итак, вопрос в том, что я сейчас делаю неправильно, и что должен делать, чтобы эти даты корректно пересекали интерфейс веб-службы?