【问题标题】:Datetime value getting reset in wcf service on using as a web reference and not with using as a service reference日期时间值在 wcf 服务中被重置为用作 Web 参考而不是用作服务参考
【发布时间】:2015-11-25 21:39:42
【问题描述】:

我有一个 WCF 服务,操作如下:

    public void setNotifications(List<AnnouncementDataContract> announcements)
    {
        foreach(AnnouncementDataContract item in announcements)
        {
            ent.InsertAnnouncements(item.Anc_Text, item.Anc_Date);
        }
    }

当我将此 WCF 服务作为 Web 引用添加到我的 MVC 应用程序中并调用如下方法时:

       MyService.Service1 proxy = new MyService.Service1();
       Collection<MyService.AnnouncementDataContract> dc = new 
                              Collection<MyService.AnnouncementDataContract>();
        MyService.AnnouncementDataContract dc1 = new              
        MyService.AnnouncementDataContract();
        dc1.anc_Date = System.DateTime.Now;
        dc1.anc_Text = "Announcement1";
        dc.Add(dc1);
        proxy.setNotifications(dc.ToArray());

服务操作中“公告”的每个项目中的值被重置,我将其作为最小日期时间值而不是我在调用操作时从我的 MVC 应用程序发送的值。

但是当我将此 WCF 服务作为服务引用添加到我的 MVC 应用程序中并调用该操作时,它工作正常,并且在服务中获得了正确的 datetime 值。

【问题讨论】:

  • 你能告诉我们AnnouncementDataContract类的定义吗? (您是否向anc_Date 属性添加了[DataMember] 属性?)
  • 这可能与生成代理的方式有关 - 我相信添加服务引用使用 svcutil,而添加 Web 引用使用较旧的 ASMX 自动生成器(现在忘记名称)。在任何情况下,服务引用都是您添加对 WCF 的引用的方式。添加 Web 参考是为了与旧版 ASMX Web 服务兼容。
  • 在一个不相关的说明中:您确实应该要求客户端在他们的公告中传递 UTC 值(例如DateTime.UtcNow)。否则,如果客户端和服务器(以及可能阅读公告的其他客户端)配置了不同的时区,您最终会陷入不必要的混乱。

标签: c# asp.net-mvc wcf


【解决方案1】:

我也遇到了同样的问题。这是因为为您的 AnnouncementDataContract 类生成的代理代码还创建了一个名为 Anc_DateSpecified 的属性,该属性必须设置为 true。 这适用于所有值类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2012-04-29
    • 2012-12-31
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多