我有一个包含两个项目的VS2008解决方案,一个Web服务(我正在做的实际工作)和一个Web应用程序(我用来测试服务)。后者具有对前者的“Web引用”。它也被设置为启动项目,这样当我开始调试VS时,它在本地主机上设置了两个端口,一个用于应用程序(运行其默认.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
)当前未使用。
EventsMin类来自数据上下文,它表示一个表,该表具有完整的字段负载,在本例中,Linq查询正在评估两个位字段和两个日期时间字段的值。它应该根据提供的条件返回事件列表。
在Web应用程序中,我在default.aspx code behind中使用了此代码来调用上述方法:
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方法调用之前,日期时间变量看起来很好。即使在linq语句之前,
From
和
To
参数似乎以c结尾#
DateTime.MinValue
,明显低于SQL Server的最小日期时间值。
改变
from
和
to
在调用方法之前,其他日期的变量似乎没有效果。
所以问题是:我现在做错了什么,做了什么?
应该
我正在为这些日期做正确的跨Web服务接口?