代码之家  ›  专栏  ›  技术社区  ›  Matt Sach

向WebService方法传递日期时出现问题(sqldetime溢出)

  •  0
  • Matt Sach  · 技术社区  · 15 年前

    我有一个包含两个项目的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服务接口?

    1 回复  |  直到 15 年前
        1
  •  2
  •   David M    15 年前

    您是否可能稍微更改了方法的接口而没有更新Web引用?看起来您已经重命名了“从”和“到”参数,但仍在使用过期的代理类。

    尝试更新Web引用。