将日期传递给webservice方法的问题(SqlDateTime溢出)

时间:2009-07-20 10:54:30

标签: c# .net linq web-services datetime

我有一个VS2008解决方案,包含两个项目,一个Web服务(我正在做的实际工作)和一个Web应用程序(我用来测试服务)。后者对前者有“网络参考”。它也被设置为启动项目,因此当我开始调试VS时,在localhost上设置两个端口,一个用于app(运行其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字段的值。它应该根据提供的标准返回事件列表。

在Web应用程序中,我在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语句之前,FromTo参数似乎最终成为C#DateTime.MinValue,这显然远低于SQL Server最小日期时间值。

在调用方法之前将fromto变量更改为其他日期似乎无效。

所以问题是:我目前做错了什么, 我应该为这些日期做些什么来正确地穿过网络服务界面?

1 个答案:

答案 0 :(得分:2)

您是否有可能稍微更改了方法的界面而未更新Web引用?看起来你已经重命名了From和To参数,但仍在使用过时的代理类。

尝试更新网络参考。