2009-07-20 4 views
0

Ich habe eine VS2008-Lösung, die zwei Projekte enthält, einen Webdienst (die eigentliche Arbeit) und eine Webanwendung (die ich zum Testen des Dienstes verwende). . Letzteres hat eine "Web-Referenz" zu ersterem. Es wird auch als Startprojekt festgelegt, sodass VS beim Start von debugging zwei Ports auf localhost, einen für die App (der seine default.aspx ausführt) und einen für den Dienst eingerichtet.Problem beim Übergeben von Daten an eine Webservice-Methode (SqlDateTime-Überlauf)

Der Servicecode in events.asmx.cs hat die folgenden:

public class events : System.Web.Services.WebService 
{ 
    /* various object classes specific to service */ 

    [WebMethod] 
    public List<EventItem> GetEvents(DateTime From, DateTime To, string[] EventType) 
    { 

     EventsDataContext dc = new EventsDataContext(); 
     List<EventsMain> events = dc.EventsMains 
      .Where(ev => ev.EventStartDate >= From 
       && ev.EventEndDate < To 
       && ev.Live == true 
       && ev.IsOnWebsite == true 
      ) 
      .ToList(); 

    } 
} 

Es ist beabsichtigt, dass der letzte Parameter (EventType) verwendet wird, derzeit nicht.

Die EventsMain-Klasse stammt aus dem Datenkontext und stellt eine Tabelle mit einer ganzen Anzahl von Feldern dar, von denen in diesem Fall die LINQ-Abfrage die Werte einiger BIT-Felder und zweier DATETIME-Felder bewertet. Es soll eine Liste von Ereignissen basierend auf den angegebenen Kriterien zurückgeben.

In der Web-Anwendung, habe ich diesen Code in den default.aspx Code-behind das obige Verfahren zu nennen:

protected void Page_Load(object sender, EventArgs e) 
{ 
    events eventService = new events(); 
    DateTime from = new DateTime(2009, 1, 1, 10, 0, 0); 
    DateTime to = new DateTime(2009, 2, 1, 10, 0, 0); 
    EventItem[] eventList = eventService.GetEvents(from, to, new string[] { }); 
} 

Die letzte Zeile fehlschlägt (die die Webservice-Methode aufruft), mit dem folgenden Fehler :

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.

Wenn das Debuggen an dem Punkt, sieht die Datetime Variablen kurz vor dem Webservice Methodenaufruf, in Ordnung. Beim Einstieg in die Methode scheinen die Parameter From und To bereits vor der LINQ-Anweisung als C# DateTime.MinValue gewertet zu werden, was offensichtlich deutlich unter dem minimalen Datetime-Wert von SQL Server liegt.

Das Ändern der Variablen from und to in andere Daten vor dem Aufruf der Methode scheint keine Auswirkungen zu haben.

Also die Frage ist: Was mache ich derzeit falsch, und was sollte ich für diese Daten tun, um die Webservice-Schnittstelle richtig zu überqueren?

Antwort

2

Ist es möglich, dass Sie die Oberfläche Ihrer Methode leicht geändert und die Webreferenz nicht aktualisiert haben? Offenbar haben Sie die Parameter Von und Bis umbenannt, verwenden jedoch weiterhin eine veraltete Proxyklasse.

Versuchen Sie, die Webreferenz zu aktualisieren.

+0

Gelöst! Das hätte ich selbst nie bemerkt (dies ist das erste Mal, dass ich mit der Erstellung eines Webservice beschäftigt bin). Ich vermute, dass dies auch andere Fragen in der Zukunft vorwegnehmen wird;) –

+0

Die Parameter werden in die Anforderungs-XML serialisiert und können dann aufgrund des Namenskonflikts nicht deserialisiert werden, so dass das Webdienst-Framework stattdessen die Standardeinstellung (DateTime) hilfreich einfügt. Froh, dass das alles war ... –

Verwandte Themen