2009-07-20 6 views
0

J'ai une solution VS2008 contenant deux projets, un service Web (le travail que je fais) et une application Web (que j'utilise pour tester le service) . Ce dernier a une "référence web" à la première. Il est également défini en tant que projet de démarrage, de sorte que lorsque je débute le débogage VS configure deux ports sur localhost, un pour l'application (qui exécute son default.aspx) et un pour le service.Problème de transmission des dates à une méthode de service Web (débordement SqlDateTime)

Le code de service events.asmx.cs les éléments suivants sont:

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(); 

    } 
} 

Il est intentionnel que le dernier paramètre (EventType) n'est pas actuellement utilisé. La classe EventsMain provient du contexte de données et représente une table qui contient une charge complète de champs, dont la requête LINQ évalue dans ce cas les valeurs de deux champs BIT et de deux champs DATETIME. Il est censé renvoyer une liste d'événements en fonction des critères fournis.

Dans l'application Web, j'ai ce code dans le default.aspx code-behind appeler la méthode ci-dessus:

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[] { }); 
} 

Cette dernière ligne (qui appelle la méthode WebService) échoue avec l'erreur suivante :

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.

Lorsque le débogage, au point juste avant la méthode webservice appel, les variables DateTime ont l'air bien. En entrant dans la méthode, même avant l'instruction LINQ, les paramètres From et To semblent avoir fini comme C# DateTime.MinValue, ce qui est évidemment bien en dessous de la valeur de datetime SQL Server minimum.

La modification des variables from et to à d'autres dates avant d'appeler la méthode semble n'avoir aucun effet.

Donc la question est: Qu'est-ce que je fais mal actuellement, et ce que devrait faire je fais pour ces dates pour traverser l'interface webservice correctement?

Répondre

2

Est-il possible que vous ayez légèrement modifié l'interface de votre méthode et que vous n'ayez pas mis à jour la référence Web? Il semble que vous ayez renommé les paramètres De et À, mais que vous utilisez toujours une classe de proxy obsolète.

Essayez de mettre à jour la référence Web.

+0

Résolu! Je ne l'aurais jamais vu moi-même (c'est la première fois que j'ai travaillé à la création d'un webservice). Je suspecte que ceci préemptera également d'autres questions dans le futur;) –

+0

Les paramètres sont sérialisés dans le XML de demande et ne parviennent pas à se désérialiser à cause de la discordance de nom, ainsi la structure de services Web insère utilement la valeur par défaut (DateTime). Content que ce soit tout ... –

Questions connexes