如何将DateTime参数发送到WCF DataService

时间:2011-04-03 07:34:58

标签: wcf

我在DataService上有一个简单的函数来获取DateTime参数

[WebGet]
public IQueryable<Job> LoadJobsByDate(DateTime startDate, DateTime endDate)
{
    var context = this.CurrentDataSource;

    var jobs = from j in context.Jobs
               where j.CreatedDate >= startDate && j.CreatedDate <= endDate
               select j;

    return jobs;
}

我试图发送什么语法我得到错误。

我试过

var query1 = newContext.CreateQuery<Job>("LoadJobsByDate")
             .AddQueryOption("startDate", 
                 string.Format ("'{0:yyyy-MM-ddTHH:mm:ss}'", DateTime.Now));  

或:

var query1 = newContext.CreateQuery<Job>("LoadJobsByDate")
             .AddQueryOption("startDate", 
                 string.Format ("'datetime{0:yyyy-MM-ddTHH:mm:ss}'", DateTime.Now));  

请咨询

2 个答案:

答案 0 :(得分:24)

您可以使用ISO 8601时间戳格式通过HTTP请求向服务提交DateTime对象,该格式将时间表示为yyyy-mm-ddThh:mm:ss(例如:2011-06-02T12:24:34)。

答案 1 :(得分:4)

我不认为(从我的测试和实验中)你可以直接传递DateTime类型的参数。毕竟,最后(在WCF DataService客户端代理及其LINQ-to-WCF优点的所有细节之后),WCF数据服务总是从URL查询字符串中获取其参数,所以基本上,它只是字符串....

(这与使用WCF的SOAP绑定形成鲜明对比 - 在那里,你绝对可以使用强类型参数 - DateTime和你喜欢的任何东西。但是WCF数据服务是REST,它是所有URL-因此基于字符串)

所以我的结论是:您需要更改代码以使用string参数,然后将这些参数转换为方法中的DateTime

[WebGet]
public IQueryable<Job> LoadJobsByDate(string startDate, string endDate)
{
    // some error checking needs to be done here! If 'startDate' or 'endDate'
    // are NULL or emtpy string --> fall back to a default

    // also - you might want to check into .ParseExact and define a list of valid,
    // supported date formats that you want to offer your users
    DateTime startDt = DateTime.Parse(startDate);
    DateTime endDt = DateTime.Parse(endDate);

    var context = this.CurrentDataSource;

    var jobs = from j in context.Jobs
               where j.CreatedDate >= startDt && j.CreatedDate <= endDt
               select j;

    return jobs;
}

正如我在代码片段中提到的那样 - 必须获取字符串并将其解析为DateTime,这要求您对其进行一些额外的错误检查 - 这很痛苦,但我认为有必要确保您的代码不会在第一次有人输入日期或无效日期格式时中断....

相关问题