Jos*_*osh 11 .net c# xml web-services
我通过从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 {...}
而生成的类中的日期对象如下所示:[System.Xml.Serialization.XmlElementAttribute(DataType ="date",Order = 12)] public System.DateTime MyDate {...}
因此,日期对象中还有一些其他信息--DataType ="date",但dateTime对象没有DateType.这可能是问题吗?如果是这样,为什么不正确生成类?
谢谢你的帮助
我有一个在 wsdl 中不是强制的 dateTime 元素,即使我在要发送的 .NET 对象上设置了该属性,它也不会作为 XML 传递。(我使用.NET Trace 日志查看器进行了调试)。
后来我意识到我必须将 DateTime 属性旁边提供的布尔值设置为 true,并且它会起作用。xxx指定。请参阅下面的代码。
/// <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");
}
}
Run Code Online (Sandbox Code Playgroud)
我在经过大量艰苦工作之前和之后都遇到了这个问题,我发现通信的一端使用英国(dd/MM/yyyy)日期格式,另一端使用美国(MM/dd/yyyy)格式。这是在机器上的全球化文化中设置的(就像 @Gaurav 的答案),但是,以下内容并不那么明显:
当我在 VS 下运行代码时,我以我自己的身份运行,因此也是我自己的 en-GB 文化。您可能知道,当我在 IIS 下运行代码时,它是在 ASPNET 帐户(或网络服务等,具体取决于 IIS 的版本)下运行。事实证明,ASPNET 帐户具有 en-US 文化,因此出现了问题。
简单的解决方案是在 Web.config 中添加全球化标签并设置culture 和uiculture 属性。
| 归档时间: |
|
| 查看次数: |
4157 次 |
| 最近记录: |