在WebServices中,TimeSpan不能作为系统的TimeSpan作为参数,在客户端会生成新的TimeSpan类。
一、问题重现
创建一个以TimeSpan为参数的Web Method:
1: [WebMethod]
2: public string HelloWorld(TimeSpan span)
3: {
4: return "Hello World";
5: }
6:
1: <s:element name="HelloWorld">
2: - <s:complexType>
3: - <s:sequence>
4: <s:element minOccurs="1" maxOccurs="1" name="span" type="tns:TimeSpan" />
5: </s:sequence>
6: </s:complexType>
7: </s:element>
8: <s:complexType name="TimeSpan" />
客户端引用Web Services会生成新的TimeSpan类:
1: public partial class TimeSpan : object,System.Runtime.Serialization.IExtensibleDataObject,System.ComponentModel.INotifyPropertyChanged {
2:
3: [System.NonSerializedAttribute()]
4: private System.Runtime.Serialization.ExtensionDataObject extensiondatafield;
5:
6: [global::System.ComponentModel.browsableAttribute(false)]
7: public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
8: get {
9: return this.extensiondatafield;
10: }
11: set {
12: this.extensiondatafield = value;
13: }
14: }
15:
16: public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
17:
18: protected void RaisePropertyChanged(string propertyName) {
19: System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
20: if ((propertyChanged != null)) {
21: propertyChanged(this,new System.ComponentModel.PropertyChangedEventArgs(propertyName));
22: }
23: }
24: }
二、解决方法
扩展TimeSpan:
1: public class TimeSpanEx
2: {
3: [XmlElement(ElementName = "TimeSpan")]
4: public string TimeSpanAsstring
5: {
6: get { return TimeSpan != null ? TimeSpan.ToString() : null; }
7: set
8: {
9: TimeSpan span;
10: if (value != null && TimeSpan.TryParse(value,out span))
11: TimeSpan = span;
12: else
13: TimeSpan = new TimeSpan();
14: }
15: }
16: [XmlIgnore]
17: public TimeSpan TimeSpan { get; set; }
18: }
通过TimeSpan传递TimeSpan:
1: [WebMethod]
2: public string HelloWorld(TimeSpanEx span)
3: {
4: return "Hello World";
5: }
6:
客户端使用示例:
1: WebService1SoapClient client = new WebService1SoapClient();
2: TimeSpanEx span = new TimeSpanEx();
3: span.TimeSpan = new TimeSpan(1,2,3).ToString();
4: client.HelloWorld(span);
5:
服务端获取的TimeSpan结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。