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 :

Creation d'une class "proxy" pour un objet


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Creation d'une class "proxy" pour un objet
    Bonsoir,

    Dans le cadre d'une migration de code de ASP a ASP.NET, j'ai un objet COM+ qui communique directement avec divers objets ASP.

    Pour faire fonctionner le tout en ASP.NET, j'utilise des classes en C# ecrites par Bertrand LeRoy pour emuler des objets ASP en ASP.NET.

    Tout fonctionne bien sauf quelques fonctions ou j'obtiens une erreur Object doesn't support this property or method. Je pense que certaines methodes ne sont pas implementees dans les classes C# mais n'arrive pas a trouver lesquels.

    Schematiquement, j'avais:
    Objet COM+ ---[communique avec]--> Objets ASP

    Pour la migration vers ASP.NET, j'obtiens
    Objet COM+ ---[communique avec]--> Objets C# ---[simule comportement d'objets ASP sur la base des]--> Objets ASP.NET

    Des idees pour resoudre cela? Ma piste etait d'introduire temporairement une 4eme etape sous forme d'une class "proxy" entre l'objet COM+ et les objets C# qui va intercepter tous les appels et invoquer les objets C#:
    Objet COM+ ---[communique avec]--> Class Proxy ---[log la methode puis invoque]--> Objets C# ---[simule comportement d'objets ASP sur la base des]--> Objets ASP.NET

    Pour cette derniere etape, je sais comment faire l'invocation des objets C# depuis une classe proxy via la reflection. Est-il possible d'avoir une methode et une propriete "catchall" qui va pouvoir intercepter tous les access au Proxy pour pouvoir ensuite les faire suivre?

    L'utilisation de methodes generiques s'est averee impossible, car je ne connais justement pas le nom des methodes ou proprietes qui sont invoquees.

    Merci d'avoir tout lu et pour tous vos conseils avises.

  2. #2
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut
    Salut,

    ton problème à l'air intéressant, je ne suis pas un pro en ASP et ASP.NET, mais je veux bien en savoir plus. Tu n'aurais pas des bouts de codes pour montrer comment tes objects COM+ communique avec le proxy et ensuite comment le proxy invoque les methodes de l'object C# ?

    Parce que tu appelles explicitement des méthodes de ton proxy, tu n'as pas besoin de catch all non ? il suffit de mettre un log dans chaque méthode de ton objet proxy...

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Salut,

    Desole pour l'attente, j'ai prefere verifier le code source plutot que d'ecrire quelques chose de memoire.

    Voici ou le code ASP que j'essaie de migrer en ASP.NET fait appel a un objet COM:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Set myObj = Server.CreateObject(application("ComObjectName") & ".ExampleObject")
    myObj.IExampleSubmit(Request.Form)
    If Not myObj.Execute(Session) Then
       Set myObj = Nothing
       Server.Transfer("SystemNotAvailable.asp")
    End If
    La version ASP.NET donne pour l'instant cela ou LegacySession et LegacyForm sont des objets AspSession et AspForm renommes:
    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
     
    // Les commentaires sont crees avec // au lieu de ' pour eviter des soucis de mise en page
     
    // Nouvel objet C# compatible ASP "wrappant" les fonctions des objets ASP.NET
    Dim legacyForm as LegacyForm
    legacyForm = new LegacyForm
     
    myObj = Server.CreateObject(application("ComObjectName") & ".ExampleObject")
    myObj.IExampleSubmit(legacyForm)
     
    // Nouvel objet C# compatible ASP "wrappant" les fonctions des objets ASP.NET
    Dim legacySession As LegacySession
    legacySession = New LegacySession
     
    If Not myObj.Execute(legacySession) Then
       myObj = Nothing
       Server.Transfer("SystemNotAvailable.asp")
    End If
    Je n'ai pas le code de l'objet COM car c'est un objet d'un partenaire. Tout ce que je vois est que lors de l'execution de mon code ASP.NET, l'objet legacyForm est bien cree. Lorsque je continue le pas-a-pas, la ligne myObj.IExampleSubmit(legacyForm) commence a etre executee et je vois une partie de la pile d'appel de l'objet COM. Celui-ci accede avec succes a la propriete .Count de legacyForm puis plante avec l'erreur Object doesn't support this property or method.

    Comme l'objet COM est une boite noire, je n'ai aucune idee de l'appel qui fait planter le tout, d'ou mon idee de proxy catchall. Cela implique egalement que je n'ai aucune idee de l'interface que je dois implementer, d'ou l'interet pour moi d'avoir un objet qui accepterai l'acces a n'importe quel propriete ou function que je pourrais ensuite tracer.

    Est-ce plus clair? Merci de ton interet et de ton aide

Discussions similaires

  1. [Tableau][Base]Création d'une classe de gestion de tableau
    Par mariogarcia dans le forum Collection et Stream
    Réponses: 40
    Dernier message: 05/11/2005, 01h19
  2. Warning lors la creation d'une classe
    Par addack dans le forum Langage
    Réponses: 11
    Dernier message: 02/11/2005, 12h06
  3. Réponses: 11
    Dernier message: 01/09/2004, 19h04

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