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

Services Web Discussion :

[SoapHttpClientProtocol] Redéfinir Invoke (ou ReadResponse)


Sujet :

Services Web

  1. #1
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut [SoapHttpClientProtocol] Redéfinir Invoke (ou ReadResponse)
    Bonjour,

    Je suis en train de développer un client pour un webservice "spécial", dans le sens où la réponse qu'il renvoie ne contient pas uniquement la réponse XML classique, mais assi des attachements (PDFs, autres XMLs, etc...).

    Si je crée mon client "comme d'habitude", et que j'essaie d'appeler le webservice, j'obtiens une erreur du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    failed: System.InvalidOperationException : Le client a trouvé 'multipart/related; type="text/xml"; start="<8E7534CA14E2CE0C1C9326E2DCA8D434>"; 	boundary="----=_Part_0_2226002.1174890813403"' comme type de contenu de la réponse, alors qu'il attendait 'text/xml'.
    [...]
    à System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
    à System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
    J'aimerais donc étendre la classe SoapHttpClientProtocol, afin de gérer ces attachements. Je pensais tout naturellement surclasser la méthode ReadResponse, pour lui faire renvoyer la réponse XML comme d'habitude, et stocker les attachements dans un tableau, afin de pouvoir les récupérer ensuite.

    Le problème, c'est que cette méthode ReadResponse doit être une méthode privée de la classe SoapHttpClientProtocol, qui est appelée dans la méthode Invoke. Je vais donc devoir redéfinir la méthode Invoke entièrement, non ? Où puis-je trouver le code de cette méthode ? Je pense qu'elle ne va pas beaucoup différer du code actuel, vu que je pense faire mon traitement des attachement dans ReadResponse...

    Qu'en pensez-vous ? Y a-t-il une meilleure manière de faire ?

    Merci d'avance !

  2. #2
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut
    Je me réponse à moi-même, afin de vous faire part des évolutions de mon problème !

    J'ai finalement découvert qu'il me suffisait de surcharcher la méthode GetWebResponse(), afin d'intercepter la réponse et de l'épurer de ses attachements avant de la "transmettre plus loin" !

    Je suis donc en train de bosser là-dessus...

  3. #3
    Membre habitué Avatar de sisier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    Tu as fait comment finalement?

    Ca m'intéresse, parce que je suis dans le même cas que toi.

    merci

  4. #4
    Membre éclairé Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Par défaut
    Ouf, ça fait un moment !

    Il me semble que j'ai créé une nouvelle classe qui étend celle générée pour le service web. Ensuite, j'ai surchargé GetWebResponse(), dans laquelle j'ai appelé la GetWebResponse() de la super classe, pour ensuite la filtrer et ne renvoyer que la partie sans attachements.

    C'est plus ou moins ça il me semble, malheureusement c'était durant un stage, que j'ai terminé depuis, et je n'ai donc plus accès au code ...

    Bonne chance !

  5. #5
    Membre habitué Avatar de sisier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    Citation Envoyé par Wookai Voir le message
    Ouf, ça fait un moment !

    Il me semble que j'ai créé une nouvelle classe qui étend celle générée pour le service web. Ensuite, j'ai surchargé GetWebResponse(), dans laquelle j'ai appelé la GetWebResponse() de la super classe, pour ensuite la filtrer et ne renvoyer que la partie sans attachements.

    C'est plus ou moins ça il me semble, malheureusement c'était durant un stage, que j'ai terminé depuis, et je n'ai donc plus accès au code ...

    Bonne chance !
    arff,cela a pas l'air facile tout ça.
    Merci pour ton aide... je vais essayé de voir ça

  6. #6
    Membre habitué Avatar de sisier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2008
    Messages : 12
    Par défaut
    Citation Envoyé par Wookai Voir le message
    Ouf, ça fait un moment !

    Il me semble que j'ai créé une nouvelle classe qui étend celle générée pour le service web. Ensuite, j'ai surchargé GetWebResponse(), dans laquelle j'ai appelé la GetWebResponse() de la super classe, pour ensuite la filtrer et ne renvoyer que la partie sans attachements.

    C'est plus ou moins ça il me semble, malheureusement c'était durant un stage, que j'ai terminé depuis, et je n'ai donc plus accès au code ...

    Bonne chance !

    Je suis débutant. J'ai un peu de mal à m'en sortir.
    j'ai fait un truc de ce genre dans mon fichier de reference de mon webservice



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
      Protected Overrides Function GetWebResponse(ByVal request As System.Net.WebRequest) As System.Net.WebResponse
     
                Dim myResponse As System.Net.WebResponse
     
                myResponse = MyBase.GetWebResponse(request)
     
                Return CorrectContentType(myResponse)
     
            End Function
     
     
     
     
            ' Protected Overrides Function GetWebResponse(ByVal request As System.Net.WebRequest, IAsyncResult result) As System.Net.WebRequest
     
            'Dim myResponse As System.Net.WebResponse
            '   myResponse = base.GetWebResponse(request, Result)
     
            '    Return CorrectContentType(myResponse)
     
            '  End Function
     
     
     
     
     
            Private Function CorrectContentType(ByVal myResponse As System.Net.WebResponse) As System.Net.WebResponse
     
                myResponse.ContentType = "text/xml"
     
                Return myResponse
     
            End Function
    Mais il me dit que GetWebResponse ne substitue pas à une classe de base. Donc il ne peut pas être override.

    J'ai du loupé quelquechose

    As tu encore des souvenirs la dessus?

Discussions similaires

  1. [POO] Redéfinir une méthode en se servant de l'ancien code
    Par bart64 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 31/05/2005, 13h59
  2. opérateur, redéfinir la priorité
    Par narkhor dans le forum C++
    Réponses: 12
    Dernier message: 12/04/2005, 13h55
  3. [.NET] Pourquoi redéfinir la méthode dispose() d'une forme?
    Par Polyptyx dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 07/09/2004, 12h10
  4. [Com] Interface IDispatch.Invoke
    Par Laurent Dardenne dans le forum Windows
    Réponses: 4
    Dernier message: 15/06/2004, 22h51
  5. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10

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