. net web服务引用生成的类不使用dateTime类型

本文关键字:dateTime 类型 服务 web 引用 net | 更新日期: 2023-09-27 18:05:51

我通过从XML模式生成WSDL和类,用Java编写了一个JAX-WS web服务。

我在visual studio中添加服务作为web参考,与c#一起使用。. NET客户端程序。

原始XML模式使用一对日期/时间类型:xs:date和xs:dateTime用于某些元素。

我的问题是我的'dateTime'类型不能正常工作。它在生成的类(由Visual Studio 2010中的XMLSerializer生成)中(正确地)转换为. net DateTime对象,然后我可以创建自己的DateTime对象并在其中一个类上设置DateTime。但是,当将请求发送回服务器时,客户机应用程序发送的是一个空值,而不是我设置的DateTime对象。所以我猜它没有正确序列化。

我对'date'类型没有同样的问题,它序列化/反序列化很好。

我注意到可能是问题所在,但不确定:

生成的类中的dateTime对象如下所示:

[System.Xml.Serialization.XmlElementAttribute(Order=10)]
public System.DateTime MyDateTime { ... }
而生成的类中的date对象看起来是这样的:
[System.Xml.Serialization.XmlElementAttribute(DataType="date", Order=12)]
public System.DateTime MyDate { ... }

所以,在date对象中有一些额外的信息- DataType="date",但是没有dateTime对象的DateType。这就是问题所在吗?如果是这样,为什么它不能正确地生成类?

感谢您的帮助

. net web服务引用生成的类不使用dateTime类型

我有一个dateTime元素,它在wsdl中不是强制性的,即使我在要发送的. net对象上设置了属性,它也没有作为XML传递。(我用。net跟踪日志查看器进行了调试)。

后来我意识到我必须将datetime属性旁边提供的布尔值设置为true,这样就可以工作了。xxxSpecified。

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Order=6)]
public System.DateTime Created {
    get {
        return this.createdField;
    }
    set {
        this.createdField = value;
        this.RaisePropertyChanged("Created");
    }
}
/// <remarks/>
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool CreatedSpecified {
    get {
        return this.createdFieldSpecified;
    }
    set {
        this.createdFieldSpecified = value;
        this.RaisePropertyChanged("CreatedSpecified");
    }
}

我在JBoss机器上使用Livecycle。我从那里把网络服务连接到。net。我发现DateTime和boolean不能正确转换。我知道这不是很好的形式,但我把序列化数据类型属性为字符串。这是我传递数据的方式。

我会检查kroonwijk写了什么。Fiddler是一个检查服务进出的好工具。

我之前遇到过这个问题,经过大量的努力工作后,我发现通信的一端使用英国(dd/MM/yyyy)日期格式,另一端使用美国(MM/dd/yyyy)格式。这是在全球化文化的机器上设置的(就像@Gaurav的答案),然而,以下内容并不那么明显:

当我在VS下运行代码时,我以我自己的身份运行,因此我自己的en-GB文化。正如你可能知道的,当我在IIS下运行代码时,它是在asp.net帐户(或NETWORK SERVICE等,取决于IIS的版本)下运行的。原来asp.net帐户有en-US文化,因此出现了问题。

简单的解决方案是给Web添加一个全球化标签。配置并设置文化和文化属性

如果您使用全球化文化信息作为日期时间,则不会发生此类问题。在这两个代码中,您将为日期使用相同的文化信息。datetime。在这种情况下,您发现两个代码中的日期时间格式相同。