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

API, COM et SDKs Delphi Discussion :

Consommer un WebService dans un object COM - violation d'access


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut Consommer un WebService dans un object COM - violation d'access
    Bonjour,

    J'ai un problème sur les appels d'un Web Service dans un objet COM.

    Je m'explique :
    Mon Web Service est installé sur un serveur. Il est écrit en C#.
    J'arrive à consommer mon Web service sur poste client à partir d'un programme écrit en Delphi 7.
    Par contre, j'ai des objets COM écrit en Delphi, et si je consomme le Web Service à partir des Objet COM, j'ai des violation d'access à chaque appel de méthode. J'imagine que ces un problèmes de droits d'exécution avec les objet COM. Mais je sèche complètement.

    Merci d'avance de votre aide

  2. #2
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    Si c'est réellement du COM, il ne doit pas y avoir de grandes différences avec un appel direct depuis l'appli, et surtout pas une différence de droits !

    Il faudrait que tu idenfies précisément la ligne de code qui provoque l'erreur. Essaie de prendre l'objet COM en debug et voit ce qui se passe. Il est probable que tu ais quelque chose qui n'est pas initialisée correctement, ou que tu as une belle exception avec un message d'erreur clair qui n'est pas trapper et qui remonte en provoquant à son tour un AV.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    c'est reellement un COM. et il ecrit en delphi 7.

    Au debut je pensais que c etait le web service qui ne fonctionnait pas. c est pour ca que je l ai mis dans une application classique pour y faire un appel direct. et ca fonctionne.

    Par contre quand mon COM et mon web service se trouve sur la meme machine, ca fonctionne aussi.

    Mais quand le web service est situe sur autre machine j ai une violation d acces sur l appel.

    Je peux debugger le COM et le WebService. Je recupere bien un pointeur du WebService dans l objet COM, mais au moment de l appel ca plante. c est pour ca que je pemse que c est un probleme de droit. mais ou je ne sais pas.

  4. #4
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    Et bien sûr tu as essayé l'appel du WebService directement depuis l'appli, lorsque le WebService se trouve sur une autre machine ?

    Si ça marche dans ce cas, il va falloir compiler l'objet COM avec les sources de la VCL et essayer de rentrer en debug dans la VCL pour voir ce qui se passe.
    Tu peux aussi essayer un sniffer HTTP et voir s'il y a quelque chose qui communique.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    Bien sur evidement. je vais cmpiler avecv la vcl pour voir ce que ca donne. mais j ai vraiment l impression que c est une histoire d autorisation avec les object COM.

    j essaie ca de suite. et je vous tiens au courant.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    mmm, ca donne pas grand chose...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    J'y arrive vraiment pas !!! Y a t il des droits particuliers à mettre sur l'objet COM pour qu'il puisse executer un appel du Web Service.
    Apparement je me connecte bien au Web Service, mais l'appel à une function du WebService ne fonctionne pas. En compilant avec la VCL, je n'ai pas d'infos. il s'arrête vraiment à l'appel.

    Les paramètres sont correctes, car c'est les mêmes utilisés par mon Application Win32 classique.

    Au secours, je pete un plomb

  8. #8
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 119
    Par défaut
    As-tu essayé dans une DLL normal non COM ?
    Si cela fonctionne, fait une DLL normal, qui sera appelé par l'objet COM
    Il faut se rappeler qu'il y a un fort mécanisme de persistance entre les Interface Remotable et le XML généré, peut-être qu'il soit nécessaire d'inclure une unité en plus, ou appelez une fonction comme CoInitialize ... faut savoir que dans une Application, il y a beaucoup de chose qui sont appelés sans qu'on le sache, et ce doit poser un contexte pour le bon fonctionnement de l'application

    Sinon, active le Debug de la VCL, j'ai aussi pour ma part débug RIO et HTTPTransport, pour insérer l'identification HTTP , je me suis senti bien seul sur ma question ..
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    J'ai essayé avec un exe d'appeler le web Service, ça marche.
    J'ai essayé avec un exe qui appel une DLL qui appel le WebService, ça marche.

    J'ai essaye cette même dll dans l'objet COM, et ben ça marche pas. j'ai une violation d'access au moment de l'appel de la fonction. Mais pas au moment de la recuperation de l'instance

    J'ai active le debug avec la VCL, et je ne vois rien. au moment de l'appel de ma méthode, boum ça plante. impossible de voir ce qui est appelé derrière.
    J'ai pas de trace de quoi que ce soit. et j'ai pas d'idée pour contournée le problème. Je dois à partir de mon objet COM, appelé un WebService distant.

    Merci encore pour votre aide

  10. #10
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 119
    Par défaut
    Peut-être effectivement, un problème lié au Gestionnaire Mémoire COM ...
    un problème avec des WideString par Exemple ?

    tu appeles ta DLL par un LoadLibrary \ GetProcAddress dans l'objet COM et tu as quand une violation d'Accès, c'est fort ça !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    Dans l'appel du WebService, j'utilise des WideString

    Sinon j'appele ma DLL par LoadLibrary, puis un GetProcAddress pour la methode de DLL ou j'ai impleter l'appel au WebService. Mais ça plante dans au moment de l'appel de l'api du WebService. Pareil que si je passer pas par une Dll mais directement par le COM. c'est incompréhensible.
    Je penche plus pour une histoire de droit d'execution avec le Com. J'ai changé l'identité du compte system à un compte Administrateur. J'ai cru à un moment que ça marcher, mais non !!!
    y a t il des traces qu'on pourrait lire dans le MSDTC ? mais je n'arrive pas à lire les log du MSDTC.

    Rappel : Client Com en Delphi 7 et Web Service en C# VS2005 FrameWork 2

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    Au final, j'ai fait un COM C#, et ça marche mieux. Ce n'est pas ce que je voulais faire. mais bon on va se débrouiller comme ça.

    Merci pour votre aide.

Discussions similaires

  1. problème de conversion de dimension dans BUSINESS OBJECT
    Par greatmaster1971 dans le forum Deski
    Réponses: 4
    Dernier message: 28/04/2014, 13h15
  2. Réponses: 1
    Dernier message: 11/01/2013, 12h14
  3. Acceder a un object COM dans une ISAPI Delphi
    Par Monk666 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 26/01/2008, 11h27
  4. Notion de boucles dans Business Object
    Par lionelEIGIP dans le forum Deski
    Réponses: 1
    Dernier message: 08/04/2004, 11h26
  5. Réponses: 2
    Dernier message: 30/01/2004, 14h07

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