. 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。这就是问题所在吗?如果是这样,为什么它不能正确地生成类?
感谢您的帮助
我有一个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。在这种情况下,您发现两个代码中的日期时间格式相同。