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

Windows Communication Foundation .NET Discussion :

Envoi ZipFile via WCF


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Par défaut Envoi ZipFile via WCF
    Bonjour à tous.

    J'aurais besoin d'envoyer un objet n'étant pas un type de base à un WCF. Il s'agit d'un ZipFile (de la librairie Ionic.Zip).

    J'ai donc fait le service suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        // NOTE: If you change the interface name "IInstallService" here, you must also update the reference to "IInstallService" in Web.config.
        [ServiceContract(Namespace = "http://test.ServiceModel.Zip")]
        public interface IInstallService
        {
            [OperationContract]
            bool InstallModule(customZipFile zipFile);
        }
    et, n'ayant pas accès à la classe ZipFile de la librairie, j'ai fait une customZipFile

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    using ...    
    using Ionic.Zip;
    [DataContract(Namespace = "http://test.ServiceModel.Zip")]
        [KnownType(typeof(ZipFile))]
        public class customZipFile:ZipFile
        {
        }
    seulement lorsque j'essaie d'accéder à mon WCF j'obtient le message suivant :
    Sérialisation du type 'Ionic.Zip.ZipFile' impossible. Envisagez de le marquer avec l’attribut DataContractAttribute et de marquer tous ses membres devant être sérialisés avec l’attribut DataMemberAttribute. Consultez la documentation Microsoft .NET Framework pour connaître les autres types pris en charge.
    J'ai suivi plusieurs tutoriaux sur l'envoi de type personnalisés via des webservices, et j'avoue que je bloque sérieusement là dessus en ce moment. J'ai surement du manquer une étape ou bien un détail conceptuel sur l'intégration de types types personnalisés dans les interfaces de web-services.

    Je vous ai mis là toutes les manips que j'ai faites, à savoir ajouter un "WCF Service" dans mon projet, ajouter une référence vers la librairie Ionic, créer une classe perso.
    Il va sans dire que mes autres services du même projet fonctionnent normalement sur mon serveur IIS, le problème viens vraiment de la sérialisation.

    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Par défaut
    Salut,

    Pour que des objets complexes (classes) puissent être sérialisés par WCF, il faut les marquer avec l'attribut DataContract et aussi spécifier les champs à prendre en compte via DataMember.

    Je pense que ta classe ZipFile n'utilise pas ces attributs. Elle ne peut donc pas être transmise directement par WCF. Même si en théorie tu peux faire une dérive de celle ci avec les bons attributs, cela ne semble pas une bonne solution. Je pense qu'il est plus pertinent d'envoyer le flux représentant réellement le contenu zippé, et le réimporter dans ton service avec une nouvelle classe ZipFile.

  3. #3
    Membre averti

    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Par défaut
    Ok,
    merci pour la réponse, je pensais que le [KnownType suffirait et que du coup je n'aurais pas besoin des datacontract et datamember.

    Penses-tu qu'il soit donc plus cohérent d'envoyer des objets FileStream ?

    Le problème que j'ai est que j'ai besoin de récupérer des fichiers pour les enregistrer directement dans le dossier de publication IIS sur le serveur.

    Le type ZipFile me permettait de faire ça (contient une méthode Extract(destination)).

    J'avais déjà pensé à envoyer d'autres type d'objets, voir carrément des byte[] mais je suis alors bloqué car la méthode File.Move demande une URI vers le fichier à déplacer, URI n'existant pas pour le coup.

    Le C# n'étant pas mon domaine de prédilection je suis donc un peu en manque de solutions techniques, le pire étant que la manip n'est pas compliquée à faire, et que j'imagine bien que monsieur C# a une solution à mon problème, je ne sais juste pas laquelle. . .

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 97
    Par défaut
    Pourquoi File.Move ? Tu envoies ton Byte[] à ton serveur (via WCF ou autre), puis tu l'enregistres directement dans un fichier (System.IO.File.WriteAllBytes).

  5. #5
    Membre averti

    Inscrit en
    Juillet 2009
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2009
    Messages : 34
    Par défaut
    oui, en effet ! ! !

    merci beaucoup à tous les deux !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Envoi multiple via html/php
    Par jim1 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 10/05/2007, 08h43
  2. Envoi mail via telnet
    Par Bourriquette dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 14/03/2007, 10h03
  3. procedure envoie mail via OUTLOOK
    Par laurent1 dans le forum Oracle
    Réponses: 13
    Dernier message: 22/10/2006, 10h16
  4. Problèmes d'envoi free via Outlook
    Par planete dans le forum Outlook
    Réponses: 5
    Dernier message: 16/10/2006, 18h32
  5. Envoi video via ethernet
    Par Kamoula_telecoms dans le forum Développement
    Réponses: 3
    Dernier message: 25/04/2006, 11h20

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