IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

WCF problème avec les time (datetime)


Sujet :

C#

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : avril 2008
    Messages : 97
    Points : 143
    Points
    143
    Par défaut WCF problème avec les time (datetime)
    Bonjour,

    je vous explique mon problème.

    je suis en .Net 3.5

    J'ai créé une application client WCF qui doit consommer un webservice SAP.

    Le client doit appeler une méthode du webservice avec en paramètre une heure.

    Le soucis c'est que le WSDL spécifie un pattern pour le type time comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          <xsd:simpleType name="time">
            <xsd:restriction base="xsd:time">
              <xsd:pattern value="[0-9]{2}:[0-9]{2}:[0-9]{2}" />
            </xsd:restriction>
          </xsd:simpleType>
    Pour ce paramètre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
              <xsd:element name="Keytime" type="n0:time" />
    Qui dans la classe proxy générée est déclaré comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public System.DateTime Keytime ...
    Mais malgré tout, le message SOAP est envoyé comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Keytime>10:07:23.0000000+01:00</Keytime>
    Et ça fait planter la fonction...

    Y'a t'il un moyen de faire en sorte qu'il n'y ai pas la partie ".0000000+01:00" sans modifier la classe proxy qui est susceptible d'etre recréée, vu qu'on y ajoute souvent des méthodes?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    mars 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : mars 2008
    Messages : 88
    Points : 81
    Points
    81
    Par défaut
    Hello,

    C'est très bizarre comme problème.
    Cette sérialisation xml des Datetime est parfaitement interopérable avec les autres technos webservices classiques (dont les services exposés au travers de WSDL) ...

    Comment as-tu généré tes classes proxy, à l'aide du générateur intégré à VS ?
    En théorie, il s'occupe de lire le WSDL comme un grand ...

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur .NET
    Inscrit en
    avril 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : avril 2008
    Messages : 97
    Points : 143
    Points
    143
    Par défaut
    Oui j'utilise visual studio 2010 pour générer la classe proxy.

    Est-il possible qu'il ne tienne pas compte du pattern sur les xsd:time lors de la sérialisation? les patterns seraient-ils permis uniquement sur les string?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    septembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Je rencontre actuellement le même problème.
    Est-ce que quelqu'un a trouvé une solution ?

    Merci.

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : février 2010
    Messages : 3 611
    Points : 9 744
    Points
    9 744
    Billets dans le blog
    3
    Par défaut
    Comment as-tu setté la propriété Kind de ton objet DateTime ?

    Si tu ne l'as pas settée, voici comment le faire :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    var theDate = DateTime.SpecifyKind(objDate, DateTimeKind.Unspecified);
    Enfin pour info, voici la liste des valeurs possibles : DateTimeKind Enumeration.

    A voir aussi, les Coding Best Practices Using DateTime in the .NET Framework.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    septembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Malheureusement SpecifyKind n'a pas aidé.
    Je me suis résolu à modifier le fichier wsdl avant la création du proxy pour remplacer xsd:time par xsd:string.
    J'ai donc un string au lieu d'un datetime dans la classe du proxy et je gère moi même les conversions.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    août 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : août 2011
    Messages : 14
    Points : 24
    Points
    24
    Par défaut
    Tu es bien sure que la propriété est bien un DateTime parce que la ça ressemble plutot à un DateTimeOffset?

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/08/2010, 16h21
  2. WCF - Problème avec les DataContract
    Par ophalia dans le forum Windows Communication Foundation
    Réponses: 3
    Dernier message: 07/10/2007, 21h03
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 17h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 16h44
  5. []Problème avec les formulaires Outlook
    Par davidinfo dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo