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 :

Pros du dev COM/OLE : Erreur $80010001 (L'appel a été rejeté)


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 149
    Par défaut Pros du dev COM/OLE : Erreur $80010001 (L'appel a été rejeté)
    Bonjour à tous,

    je rencontre le problème suivant :



    je développe une application doté d'un serveur COM hors processus (il s'agit d'un exe) et de modules clients de ce serveur COM.

    Tout se passe bien tant que les modules et le serveur COM fonctionne sur la même machine physique. Par contre si le module est lancé depuis une autre machine celui-ci se connecte au serveur COM facilement mais j'ai plein d'erreurs OLE $80010001 "L'appel a été rejeté par l'appelé".
    En effet mes modules peuvent êtres amenés à rejeter temporairement des appels sous certaines conditions. C'est pourquoi j'ai implémenté côté client et côté serveur une interface "IOLEMessageFilter".

    Côté client j'ai implémenté "HandleInComingCall" pour rejeter l'appel en spécifiant "SERVERCALL_RETRYLATER" (et non "SERVERCALL_REJECTED" ) afin que le serveur recommence l'appel plus tard. Côté serveur j'ai implémenté la méthode "RetryRejectCall" pour retourner "100" ce qui signifie "retenter l'appel dans 100 ms" (pour info le client possède la même implémentation de cette méthode).

    Le problème est que si le client provient d'un autre ordinateur alors la méthode "RetryRejectCall" n'est jamais appelé dans le serveur, à la place j'obtiens directement l'erreur OLE décrite.
    J'ai vérifié que l'appel à "RegisterFilter" se fasse bien sur le serveur, et dans la même thread que celle qui me provoque l'erreur plus tard, du coup je sèche un peu.... comment se fait-il que la méthode "RetryRejectCall" ne soit pas appelée côté serveur ?

    Quelques précisions :

    - Des méthodes sont appelés depuis les clients vers le serveur (appel sortant du point de vue du client), et depuis le serveur vers le client (appel entrant du point de vue du client). Dans ce dernier cas il s'agit souvent d'un événement de retour généré depuis l'appel du client (ce qui provoque une réentrance avec des appels marqués "CALLTYPE_NESTED", ces appels sont forcément acceptés et ne posent donc pas de soucis), mais pas forcément.

    - J'ai imposé le même modèle de cloisonnement sur les 2 threads (apartment) avant l'enregistrement du filtre, ce qui est sans effet.

    Enfin j'ai tenté de rattrapper l'exception côté serveur pour rebalancer moi-même l'appel plus tard mais cela m'oblige à bloquer la thread et donc je génère un deadlock si l'appel n'est pas "nested" (provoqué par le client) puisque pendant ce temps le serveur ne peut plus accepter d'appels entrants (de point de vue serveur cette fois donc).


    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 149
    Par défaut [Résolu] (enfin si on veut)
    J'ai trouvé la cause :

    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx


    En bas on peut lire :

    "If a client implements IMessageFilter and calls a server method on a remote machine, RetryRejectedCall will not be called"

    Je suis vert, je n'ai donc pas de solution et en plus j'ai mis 3 jours à trouver cette note !

Discussions similaires

  1. [Programmation]Faire du COM/OLE sous Linux ou équivalence
    Par randriano dans le forum Applications et environnements graphiques
    Réponses: 13
    Dernier message: 12/06/2008, 08h51
  2. Problème pilotage OLE : erreur sur <utilcls.h>
    Par Pymousse dans le forum C++Builder
    Réponses: 13
    Dernier message: 29/06/2007, 13h07
  3. tutorial COM/OLE
    Par hiko-seijuro dans le forum MFC
    Réponses: 4
    Dernier message: 11/05/2006, 11h27
  4. fiabilité des offres d'emploi du forum dev.com
    Par djibril dans le forum Emploi
    Réponses: 1
    Dernier message: 09/07/2005, 08h00
  5. [delphi 5 pro] Form.ShowModal, message d'erreur
    Par mariustrezor dans le forum Bases de données
    Réponses: 6
    Dernier message: 07/12/2004, 08h22

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