我有一个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语句之前,From
和To
参数似乎最终成为C#DateTime.MinValue
,这显然远低于SQL Server最小日期时间值。
在调用方法之前将from
和to
变量更改为其他日期似乎无效。
所以问题是:我目前做错了什么, 我应该为这些日期做些什么来正确地穿过网络服务界面?
答案 0 :(得分:2)
您是否有可能稍微更改了方法的界面而未更新Web引用?看起来你已经重命名了From和To参数,但仍在使用过时的代理类。
尝试更新网络参考。