Webservice-如何在datetime元素中传递时区信息

西蒙妮

我得到了一个wsdl,我必须按照其规格创建一个Web服务。我正在使用Visual Studio2010。此外,还定义了这种复杂类型:

    <xsd:complexType name="Person">
        <xsd:sequence>
            <xsd:element name="surname" type="xsd:string"/>
            <xsd:element name="name" type="xsd:string"/>
            <xsd:element name="birthDate" nillable="true" type="xsd:dateTime"/>
        </xsd:sequence>
    </xsd:complexType>

使用VS,我得到了以下CS(我不记得自己是怎么做到的,但是我遵循了在网络上找到的说明):

    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.1")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://XXX/Submitter/")]
    public partial class Person {
        private string surnameField;
        private string nameField;
        private System.Nullable<System.DateTime> birthDateField;

        /// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string surname {
            get {
                return this.surnameField;
            }
            set {
                this.surnameField = value;
            }
        }
        /// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string name {
            get {
                return this.nameField;
            }
            set {
                this.nameField = value;
            }
        }
        /// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true)]
        public System.Nullable<System.DateTime> birthDate {
            get {
                return this.birthDateField;
            }
            set {
                this.birthDateField = value;
            }
        }

一切都是正确的:它可以编译,运行并给出预期的结果;唯一的问题是,给我wsdl的另一方在调用我的Web服务时希望获得生日日期字段为

2013-02-15T17:28:00+01:00

带有时区信息,而他们收到的结果就像

2015-11-17T18:30:11

没有时区。

我的问题是我有一个DateTime?类型,那是我从类实例化到我的对象的那个类型。我应该覆盖序列化还是还有另一个最常见的解决方案?谢谢

马特·约翰逊·品特

不幸的是,XSD与.NET在SOAP Web服务中所支持的之间存在很大的不匹配。

.NET对于此类信息只有两种-DateTime.NET DateTimeOffset从技术上讲,最好将它xs:datetime映射到DateTimeOffset,但这不是它的工作方式。而是xs:datetime映射到DateTime,并且在很大程度上取决于Kind该值属性来确定其序列化方式。

  • DateTime.Kind为时DateTimeKind.Unspecified,不传递任何偏移量信息。

  • DateTime.Kind是时DateTimeKind.Utc,则Z传递,与相同+00:00

  • DateTime.Kind是时DateTimeKind.Local,则传递与给定日期相对应的本地偏移量。

您可以使用来应用一种DateTime.SpecifyKind,或者如果要在处理过程中转换值,则可以使用.ToUniversalTime().ToLocalTime()或者,如果您知道这些值属于特定时区,则可以使用该TimeZoneInfo对象的转换方法只要结果种类是除Unspecified偏移量以外的其他任何内容,都将包含偏移量。

不幸的是,没有选择指定任意偏移量的选项这将需要DateTimeOffset类型,SOAP服务不支持类型。

另外,请考虑一下,该xs:datetime类型实际上是生日的错误类型。应该使用xs:date,它只是一个日期,例如"2013-02-15".NET中目前没有支持这种类型的类型,尽管很快就会出现一种类型,如corefxlabDate中的System.Time包中那样这对于此类情况很有用,但是如果我们可以返回并修复SOAP序列化程序以使用它们,则还有待观察。

确实,最好的主意是不要使用XML和SOAP。而是围绕JSON和REST设计Web服务。在这里,您可以完全控制此类事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何学习Java WebService

来自分类Dev

Webservice-如何部署?

来自分类Dev

如何从webservice获取json

来自分类Dev

如何在 webService Rest 中获取 arrayJSON?

来自分类Dev

WebService生成的C#代码在以前的WebService版本中丢失

来自分类Dev

如何创建接收XML的WebService?

来自分类Dev

在php中处理webservice对象?

来自分类Dev

在android中调用soap webservice

来自分类Dev

WebService中未消毒的XML,如何消毒

来自分类Dev

如何访问 Webservice 文件中的 Gridview

来自分类Dev

无法将SortedDictionary传递给WebService?

来自分类Dev

如何在Restful WebService Java中读取JSON负载

来自分类Dev

如何在Rest WebService中获取请求标头值

来自分类Dev

如何在Restful WebService Java中读取JSON负载

来自分类Dev

如何在浏览器中打开python webservice

来自分类Dev

如何在springboot中设置webservice响应的媒体类型?

来自分类Dev

如何从WebService方法返回多属性

来自分类Dev

如何从Android上的Java WebService获取图像

来自分类Dev

如何调用和获取json webservice?

来自分类Dev

如何动态指定Spring Restful WebService URL?

来自分类Dev

如何从 jax ws webservice 的 8080 更改端口?

来自分类Dev

在Spring Restful WebService中返回JsonObject

来自分类Dev

SOAPHandler JAX-WS WebService中的MessageContext

来自分类Dev

REST WebService和Java中的并发

来自分类Dev

在php webservice中解析json请求

来自分类Dev

PHP通过Webservice在Modle中创建用户

来自分类Dev

会话对象在WebService中引发异常

来自分类Dev

从Android中的WebService获取数组列表

来自分类Dev

Android Webservice中的java.lang.NullPointerException