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

Dotnet Discussion :

[Remoting] sérialisation d'un delegate


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut [Remoting] sérialisation d'un delegate
    Salut,
    Je viens de faire ce tutoriel, et en cherchant à aller un peu plus loin j'ai rencontré un problème. J'ai voulu ajouter un évènement à mon objet serveur, j'ai donc déclaré l'évènement dans l'interface. Mais lorsque le client tente d'ajouter un handler à l'évènement, il se produit une SecurityException:
    Le type System.DelegateSerializationHolder et les types qui en dérivent (tel que System.DelegateSerializationHolder) ne peuvent pas être désérialisés avec ce niveau de sécurité.
    J'imagine qu'il faut bidouiller dans la conf pour modifier le niveau de sécurité, mais je ne sais pas comment faire, et s'il faut le faire côté client ou côté serveur, ou les deux...

    D'autre part, je me demandais s'il était possible pour le serveur d'obtenir des informations sur le client, notamment son adresse dans le cas d'un channel Tcp ou Http. Ca m'étonnerait un peu que ce ne soit pas possible : puisque la connection se fait par une socket, le serveur a forcément accès à l'adresse du client.
    J'ai fouillé toute l'arborescence de System.Runtime.Remoting sans trouver... peut-être System.Runtime.Remoting.Contexts.Context, mais je ne vois pas trop comment l'utiliser, surtout que la doc dit :
    This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.
    Merci d'avance pour votre aide !


    EDIT: il me semblait avoir vu un jour un composant de configuration du framework dans la console de gestion Windows... je suppose que c'est là qu'il faut configurer les options de sécurité, mais je ne trouve plus ce composant
    Savez-vous où je peux retrouver ça ? J'utilise Vista et VS2008 beta 2

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bon, j'ai trouvé un début de solution ici... mais ça marche pas
    Voilà l'app.config du client, que je charge avec RemotingConfiguration.Configure :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.runtime.remoting>
        <channels>
          <channel ref="tcp">
            <clientProviders>
              <formatter ref="binary" typeFilterLevel="Full" />
            </clientProviders>
          </channel>
        </channels>
      </system.runtime.remoting>
    </configuration>
    Apparemment il doit y avoir un truc qui cloche dans ce fichier de config, j'ai une RemotingException:
    Impossible de lire le fichier .Config 'D:\Docs\Visual Studio 2008\Projects\tests\RemotingSolution\RemotingClient\bin\Debug\RemotingClient.exe.config' en raison de l'exception 'System.Runtime.Remoting.RemotingException: Un modèle 'channel' ne peut pas référencer un autre modèle 'channel'.
    à System.Runtime.Remoting.Activation.RemotingXmlConfigFileParser.ReportError(String errorStr, RemotingXmlConfigFileData configData)
    à System.Runtime.Remoting.Activation.RemotingXmlConfigFileParser.ReportTemplateCannotReferenceTemplateError(ConfigNode node, RemotingXmlConfigFileData configData)
    à System.Runtime.Remoting.Activation.RemotingXmlConfigFileParser.ProcessChannelsChannelNode(ConfigNode node, RemotingXmlConfigFileData configData, Boolean isTemplate)
    à System.Runtime.Remoting.Activation.RemotingXmlConfigFileParser.ProcessChannelTemplates(ConfigNode node, RemotingXmlConfigFileData configData)
    à System.Runtime.Remoting.Activation.RemotingXmlConfigFileParser.ParseConfigNode(ConfigNode rootNode)
    à System.Runtime.Remoting.RemotingConfigHandler.LoadConfigurationFromXmlFile(String filename)'.
    J'ai la même erreur côté serveur.
    Je suis un peu largué... et vu l'heure, je crois que je vais m'arrêter là pour ce soir

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Personne pour m'aider ?
    J'ai réussi à résoudre l'erreur ci-dessus (il fallait un élément <application> autour de l'élément <channels>), j'ai mis en place un wrapper pour transmettre l'évènement, comme indiqué dans l'article indiqué ci-dessus, et maintenant j'arrive à enregistrer mon handler, mais j'ai encore une RemotingException (côté serveur) quand l'évènement est déclenché...
    Ce proxy distant n'a pas de récepteur de canal, ce qui signifie que le serveur ne possède pas de canaux serveur inscrits à l'écoute ou que cette application ne possède pas de canal client approprié pour communiquer avec le serveur.

    Je comprends rien... help please !

    Pour info, la conf modifiée du client :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.runtime.remoting>
        <application>
          <channels>
            <channel ref="tcp">
              <clientProviders>
                <formatter ref="binary" typeFilterLevel="Full" />
              </clientProviders>
            </channel>
          </channels>
        </application>
      </system.runtime.remoting>
    </configuration>
    et du serveur :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.runtime.remoting>
        <application>
          <channels>
            <channel ref="tcp" port="1069">
              <serverProviders>
                <formatter ref="binary" typeFilterLevel="Full" />
              </serverProviders>
            </channel>
          </channels>
        </application>
      </system.runtime.remoting>
    </configuration>

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    un petit "up"... je peux pas croire que personne ici ne connaisse le remoting

  5. #5
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Je peux en tous cas te dire que les settings du framework sont dans Panneau de Config > Outils d'admin.

    Quant au couple Events + remoting, je sais juste qu'il faut faire attention. Quand une classe A s'abonne à un event de B, ça signifie que B a une référence sur A, et donc que le serveur doit connaître la classe abonnée. CodeProjects entre autres a pas mal de tutos là dessus.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Je peux en tous cas te dire que les settings du framework sont dans Panneau de Config > Outils d'admin.
    Cool, une réponse ! j'y croyais plus ;-)
    En fait je n'ai plus besoin de ces settings, je me suis débrouillé avec le fichier app.config
    Merci quand même

    Quant au couple Events + remoting, je sais juste qu'il faut faire attention. Quand une classe A s'abonne à un event de B, ça signifie que B a une référence sur A, et donc que le serveur doit connaître la classe abonnée. CodeProjects entre autres a pas mal de tutos là dessus.
    Oui je sais, en fait j'ai fait une classe "wrapper" visible du client et du serveur qui transmet l'évènement du serveur au client, donc B n'a pas besoin de connaître A.
    Mais j'ai l'impression que je vais devoir me résigner à me passer des évènements... je devrais pouvoir me débrouiller autrement.

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

Discussions similaires

  1. Petit soucie de sérialisation avec .net remoting
    Par teddyalbina dans le forum C#
    Réponses: 2
    Dernier message: 22/03/2008, 21h34
  2. Réponses: 1
    Dernier message: 24/11/2007, 09h36
  3. Utilisations de flash remoting et com servers
    Par bolo dans le forum Flash
    Réponses: 8
    Dernier message: 11/07/2006, 10h04
  4. Réponses: 6
    Dernier message: 22/05/2006, 20h12
  5. SGBD ou sérialisation
    Par tiboleo dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 07/10/2003, 16h18

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