C# .NET web服务引用生成的类不使用dateTime类型

C# .NET web服务引用生成的类不使用dateTime类型,c#,.net,xml,web-services,C#,.net,Xml,Web Services,通过从XML模式生成WSDL和类,我用Java编写了一个JAX-WS Web服务 我将该服务添加为visual studio中的web引用,以与C#.NET客户端应用程序一起使用 原始的XML模式对某些元素使用了两种日期/时间类型:xs:date和xs:dateTime 我的问题是我的“dateTime”类型不能正常工作。它在生成的类(由VisualStudio2010中的XMLSerializer生成)中(正确地)转换为.NET DateTime对象,然后我可以创建自己的DateTime对象并

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

我将该服务添加为visual studio中的web引用,以与C#.NET客户端应用程序一起使用

原始的XML模式对某些元素使用了两种日期/时间类型:xs:date和xs:dateTime

我的问题是我的“dateTime”类型不能正常工作。它在生成的类(由VisualStudio2010中的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 { ... }
而生成的类中的日期对象如下所示:

[System.Xml.Serialization.XmlElementAttribute(Order=10)]
public System.DateTime MyDateTime { ... }
[System.Xml.Serialization.XmlElementAttribute(DataType="date", Order=12)]
public System.DateTime MyDate { ... }
因此,date对象-DataType=“date”中有一些附加信息,但dateTime对象没有DateType。这可能是问题所在吗?如果是,为什么不能正确生成类


感谢您的帮助

我当时正在JBoss机器上使用Livecycle。我将web服务从那里连接到.net。我发现DateTime和Boolean不能正确翻译。我知道这不是一个好的形式,但我将SerializeDataType属性设置为string。这就是我获取数据的方法


我会检查kroonwijk写的东西。Fiddler是一个很好的工具,用于检查服务的进出。

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

经过大量的努力,我发现通信的一端使用英国(dd/MM/yyyy)日期格式,另一端使用美国(MM/dd/yyyy)格式。这是在机器上的全球化文化中设定的(如@Gaurav的答案),但是,以下内容并不明显:

当我在VS下运行我的代码时,我以我自己的身份运行,因此我有自己的en GB文化。您可能知道,当我在IIS下运行代码时,它是在ASPNET帐户(或网络服务等,具体取决于IIS的版本)下运行的。事实证明,ASPNET帐户有一种en-US文化,因此出现了问题


简单的解决方案是向Web.config添加一个globalization标记,并设置区域性和uiculture属性。

我有一个dateTime元素,它在wsdl中不是必需的,即使我在要发送的.NET对象上设置了属性,它也没有作为XML传递。(我用它进行了调试)

后来我意识到,我必须将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");
    }
}
//
[System.Xml.Serialization.XmlElementAttribute(顺序=6)]
已创建公共System.DateTime{
得到{
返回此.createdField;
}
设置{
this.createdField=值;
本.RaiseProperty变更(“创建”);
}
}
/// 
[System.Xml.Serialization.XmlIgnoreAttribute()]
公共bool创建指定的{
得到{
返回指定的此.createdField;
}
设置{
this.createdFieldSpecified=值;
此.RaisePropertyChanged(“CreatedSpecified”);
}
}

注意:日期时间问题只是单向的。当客户端(.NET)应用程序向服务器发送带有dateTime元素的请求对象,而服务器接收到空值时,就会出现问题。另一种方法似乎很好(如果服务器发送带有dateTime元素的响应对象,客户端接收带有正确日期/时间信息的dateTime对象的响应),请绝对100%确保您在请求中实际设置了有效的dateTime值。接下来,请通过在客户端系统上运行Fiddler并检查请求来验证发送到服务器的请求。请带着你的发现回来。我也有类似的问题。在我的例子中,在发送到服务器的xml中跳过了dateTime成员。这与wsdl包含minOccurs=“0”这一事实有关。因此,Visual生成的客户端包含“指定”此字段的标志。我必须加上:fieldNameSpedified=true;对于每个这样的字段。这也可能是你的情况。@bart:你应该根据你的评论创建一个答案。