【问题标题】:change wsdl to set time pattern更改 wsdl 以设置时间模式
【发布时间】:2011-07-25 12:17:55
【问题描述】:

我有一个我在 c# 中创建的 asmx Web 服务,它以一种方法返回一个 DateTime 值。在 WSDL 中,此值分配给时间类型。 客户端是在 SAP 系统上创建的,客户端无法解析此时间信息,收到此错误:

cx_sy_conversion_no_date_time xslt

在这种情况下可以做什么?我首先想到的是更改 wsdl,以便所有时间值都以 SAP 客户端可以解析的方式序列化。

非常感谢。

【问题讨论】:

    标签: c# .net web-services wsdl sap


    【解决方案1】:

    你有两个选择:

    1. 更改客户端 (SAP):也许它允许一些配置
    2. 更改服务器 (.NET):以适当的格式发送值,以便 SAP 能够理解它们

    你可以像这样扩展你的实体:

    [DataContract]
    public class Entity
    {
        private const string YourOwnFormat = "dd.MM.yyyy";
    
        public DateTime DateTime
        {
            get;
            set;
        }
    
        [DataMember(Name = "DateTime")]
        private string DateTimeString
        {
            get
            {
                return DateTime.ToString(YourOwnFormat, CultureInfo.InvariantCulture);
            }
            set
            {
                DateTime =
                    DateTime.ParseExact(value, YourOwnFormat, CultureInfo.InvariantCulture);
            }
        }
    }
    

    【讨论】:

    • 关于选项 2,如何更改服务器以便可以以不同的模式序列化 DateTime 对象?
    • @artsince,我认为,您可以在实体中添加 DateTime,属性 DateTimeString。在获取访问器返回格式化的日期时间。在集合中:从字符串中分配 DateTime。不要将DataMember 添加到 DateTime 属性中。
    • @artsince,据我所知,您无法更改日期时间的序列化格式。它将符合 ISO 8601。
    • 这很有趣。非常感谢。我尝试了你的建议,但我得到一个错误,说字符串不能转换为时间类型(来自 System.Serialization.XmlTextAttribute(DataType=time) 属性)所以我必须摆脱时间属性,这不是很理想。
    • 感谢您的更新。请注意,我使用 asmx。使用 data member 和 datacontract 属性,您的答案似乎针对 wcf。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    相关资源
    最近更新 更多