我有一个WCF服务,它应该从一个范围返回特定机器的最大日志日期,或者如果该机器没有日志条目则返回null:
public DateTime? GetLastBootEvent(string laptopName)
{
ITDashboardDataContext itdb = new ITDashboardDataContext();
DateTime? latestEvent = (from be in itdb.tl_sta_bootTimes
where be.machineName.ToUpper() == laptopName.ToUpper()
select be.timestamp
).Max();
return latestEvent;
}
然而,当我运行它时,我收到以下错误:
“由于内部错误,服务器无法处理请求。有关错误的详细信息, 要么在服务器上打开IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute或来自配置行为),以便发送 异常信息返回到客户端,或根据Microsoft .NET Framework SDK文档打开跟踪并检查服务器跟踪日志。“
那里的信息不多。我想通过使用DateTime?
代替DateTime
这应该允许返回空值?
我可以通过返回一些随机日期的方法来处理这个问题,比如MinDate,但我想干净利落地完成这个。
答案 0 :(得分:1)
听起来你想在这里使用DefaultIfEmpty,例如
DateTime? latestEvent = (from be in itdb.tl_sta_bootTimes
where be.machineName.ToUpper() == laptopName.ToUpper()
select be.timestamp
).DefaultIfEmpty(null).Max();
如果没有记录,Max会在没有记录的情况下抛出异常。
答案 1 :(得分:1)
您需要将查询中的时间戳转换为可以为空的日期时间,即
DateTime? latestEvent = (from be in itdb.tl_sta_bootTimes
where be.machineName.ToUpper() == laptopName.ToUpper()
select (DateTime?)be.timestamp
).Max();
答案 2 :(得分:0)
我同意wiero,看起来在执行期间抛出了一些异常。要在客户端获得异常,您可以使用web.config中的IncludeExceptionDetailInFaults参数打开异常转移(例如,查看Turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server;但最好在生产时关闭它。)
如果您收到此异常详细信息,则可以更轻松地了解问题所在。