2016-08-30 10 views
0

In meinem WebService sendet ich Span Rekord in meiner Datenbank speichern verwenden, aber wenn das Objekt in der Anwendung instanziiert, die das WebService verwendet ich die folgende Meldung angezeigt:Kann nicht System.TimeSpan meinen WebService

Cannot convert source type 'System.TimeSpan' to target type 'MyWebservice.TimeSpan'. 

das ist, wie der Timespan in meinen WebService aufgerufen:

public System.TimeSpan? WaitingTime {get; set;} 

das ist, wie die WebService Referenz in meiner Anwendung aktualisiert:

private TimeSpan waitingTimeField; 

[System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=12)] 
public TimeSpan WaitingTime { 
    get { 
     return this.waitingTimeField; 
    } 
    set { 
     this.waitingTimeField = value; 
     this.RaisePropertyChanged("WaitingTime"); 
    } 
} 

Wenn ich die Referenzen des WebService ändere, besteht ein Konflikt zwischen der Referenz und dem Webservice, der die Verwendung unmöglich macht.

Ich habe versucht, ein Objekt vom Typ MyWebService.TimeSpan zu erstellen und dies ermöglichte das Erstellen des WaitingTime-Objekts, kann aber keine Parameter für das Objekt senden, so dass MyWebService.TimeSpan immer 00:00:00

ist

EDIT:

ich versuchte, die WebService Bezug zu ändern:

private System.Nullable<System.TimeSpan> waitingTimeField; 
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true, Order=12)] 
public System.Nullable<System.TimeSpan> WaitingTime 
{ 
    get { 
     return this.waitingTimeField; 
    } 
    set { 
     this.waitingTimeField = value; 
     this.RaisePropertyChanged("WaitingTime"); 
    } 
} 

So die Probleme bei der Anwendung über, aber wenn ich an die WebService senden gefüllt Span, t er WebService "Resets" es, so war das, was 00: 03: 02: 1.321.465 wird 00:00:00

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34281")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://tempuri.org/")] 
public partial class TimeSpan : object, System.ComponentModel.INotifyPropertyChanged { 

    public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged(string propertyName) { 
     System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; 
     if ((propertyChanged != null)) { 
      propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

Antwort

0

Eine Sache, die Sie tun können, ist eine long anstelle einer TimeSpan zu senden, nur um Dinge zu vereinfachen und auch die Nachricht ein wenig zu verkleinern.

können Sie konvertieren hin und her leicht:

var numTicks = someTimeSpan.Ticks; 
var newTimeSpan = TimeSpan.FromTicks(numTicks); 

Soweit Ihr Problem, ich glaube, es ist, weil TimeSpan nicht serialisierbar zu sein scheint. Ich habe gerade eine mit XmlSerializer serialisiert, und es war leer (<TimeSpan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />).

TimeSpan ist unveränderlich, so meine Vermutung ist, dass Ihr Serializer nur nicht wissen, wie man einen serialisiert und/oder deserialisiert.

+0

Es war keine ideale Form, weil es mehrere Konvertierungen erforderlich machte, aber es war die einzige gefundene Lösung. –

0

Das Problem könnte sein, dass Sie Span Klasse nullable gemacht (Zeichen "?"). Machen Sie beide TimeSpans (auf Service und Client) NULL-fähig oder loswerden? und sehen, ob weiterhin Fehler mit nicht löschbaren Timespans vorhanden sind.

+0

Ich habe dies versucht, aber wenn ich die Verweise zwingen, die Nullable System.TimeSpan zu akzeptieren, erkennt der WebService das Objekt nicht, und rufen Sie die WS-Methode die TimeSpan ist 0:00:00 in der WS; –

+0

Verwenden Sie WCF tatsächlich für Ihren WebService? Wenn ja, senden Sie bitte die ServiceContract-Schnittstelle. – Nick

Verwandte Themen