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 :

[C#][FW 2.0] Comment utiliser le .NET Remoting ?


Sujet :

C#

  1. #1
    Membre du Club Avatar de Mecano14
    Inscrit en
    Juin 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 71
    Points : 56
    Points
    56
    Par défaut [C#][FW 2.0] Comment utiliser le .NET Remoting ?
    Bonjour,

    J'utilise le .NET Remoting pour une application client/serveur.

    L'application tourne très bien en local (forcement:p) mais à distance c'est tout autre chose.

    Après avoir correctement configurés les routeurs, le client n'arrive toujours pas à se connecter

    Voici le code du client pour se connecter au serveur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    TcpChannel channel = new TcpChannel();
    ChannelServices.RegisterChannel(channel, true);
     
    this.CDD.remoteOperation = (RemotingInterfaces.IRemoteOperation)Activator.GetObject(
                        typeof(RemotingInterfaces.IRemoteOperation),
                       this.CDD.adresseServeur);
     
    this.CDD.remoteOperation.InitializeRemoteOperation();
    La dernière ligne ne passe pas. Les lignes au dessus s'executent correctement.
    D'ou cela pourrait-il venir?

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Met la dans un bloc try/catch pour avoir le message d'erreur complet
    As-tu d'ailleurs un Journal des evènements qui récupère les problème du service Remoting :
    Ce qui m'étonne également c'est que tu n'indique aucun port pour le TcpChannel

    Classe TcpChannel
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre du Club Avatar de Mecano14
    Inscrit en
    Juin 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 71
    Points : 56
    Points
    56
    Par défaut
    Au sujet du port, il est annoncé dans l'adresse du serveur :

    adresseServeur:port

    J'ai fais un try catch et voici l'erreur qui m'est renvoyé sur le poste client:
    "System.Security.Authentication.AuthenticationException: A remote side security requirement was not fulfilled during authentication. Try increasing the ProtectionLevel and/or ImpersonationLevel. ---> System.ComponentModel.Win32Exception: Échec d'ouverture de session sur le réseau"


    Je note que sur le serveur il n'y a pas de routeur ni de firewall

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Oups c'est du 2.0 désolé j'ai pas encore pratiqué

    http://msdn2.microsoft.com/library/system.security.authentication.authenticationexception.aspx
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre du Club Avatar de Mecano14
    Inscrit en
    Juin 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 71
    Points : 56
    Points
    56
    Par défaut
    Le framework 2.0 fournit une console d'administration...
    Y'a peut-être des choses à regler dedans....apparement y'a un systême de policies.(Microsoft .NET Framework 2.0 Configuration dans les outils d'administration)

    Quelqu'un connait un peu cette console?

    Voici quelques elements supplementaires....des fois que ca puisse donner des idées à certains :

    Lorsque j'eteint mon serveur, l'erreur suivante est provoquée du coté client :
    "Aucune connexion n'a pu etre etablie car l'ordinateur cible l'a expressement refusee" (apparement cette erreur survient lorsqu'aucun TCP listening est detecté sur le port specifié)

    J'ai continué à fouiller, j'ai meme crée un VPN et l'erreur suivante s'est ensuite affichée :
    "The server has rejected the client credentials."

    Lorsque je fais un nestat sur l'ordi serveur, je vois bien mon serveur en LISTENING sur le bon port.
    Je vois aussi l'IP du client qui essai de se connecter.


    Durant tous ces essais ,j'avais enlevé firewall, antivirus et j'avais meme killé tous les process utilisant le net


    J'ai trouvé ce qu'il me fallait ici

    http://www.sharpcenter.info/html/ind...=viewtopic&t=9

    Maintenant ca fonctionne
    C'etait un probleme de configuration et apparement de droits

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 77
    Points : 61
    Points
    61
    Par défaut
    Bouhouhou j'ai exactement le même problème mais le lien n'est plus correcte, quelqu'un aurait-il un site qui pourrait m'aider sur le suejt?

  7. #7
    Membre du Club
    Inscrit en
    Mai 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 38
    Points : 47
    Points
    47
    Par défaut
    Bouhouhou j'ai exactement le même problème mais le lien n'est plus correcte, quelqu'un aurait-il un site qui pourrait m'aider sur le suejt?
    Moi aussi donc Up :p.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 273
    Points : 2 202
    Points
    2 202
    Par défaut
    La logique est assez simple :
    L'implémentation TCP Supporte le SSPI; ce qui veut dire que que si votre user client n'existe pas sur le domain du serveur;

    En ajoutant ce simple code dans une méthode côté serveur :
    Vous verrez le nom de chaque user:
    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
     
     
    WindowsIdentity identity = (WindowsIdentity)Thread.CurrentPrincipal.Identity;
     
          using (WindowsImpersonationContext ctx = identity.Impersonate())
          {
              Console.WriteLine(WindowsIdentity.GetCurrent().Name);
          }
     
          using (WindowsImpersonationContext ctx = Program.Identity.Impersonate())
          {
                Console.WriteLine(WindowsIdentity.GetCurrent().Name);
          }
     
          using (WindowsImpersonationContext ctx = identity.Impersonate())
          {
              Console.WriteLine(WindowsIdentity.GetCurrent().Name);
          }
    Dans tous les cas, ce qu'il faut comprendre c'est qu'en local, votre server dispose des droits de votre user. Donc votre serveur peut faire ce que votre user peut faire, et vous être forcémment identifiés sur votre serveur puisque c'est aussi votre client.

    En prod, votre client n'est pas votre serveur. Donc il est nécessaire de vérifier que serveur connait le user.
    De même, il faut s'assurer que votre service aura le même niveau de sécurité .NET que sur votre client.

    C'est un peu comme la connexion à un domain :
    Si je me connecte sur le domain x; le serveur va vérifier si je dispose des autorisations , si pas il me jette.

    Déjà le plus simple est d'utilisé les classes TCPclientChannel et TCPServer Channel.

    Et aussi vous pouvez essayer de vérifier cela lors de l'neregistrement du channel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Dictionary connInfo = new Hashtable();
    connInfo["protectionLevel"]      = "None";
    connInfo["secure"]               = "False";
    connInfo["tokenImpersonationLevel"] = "None";
    IChannel channel = new TcpClientChannel(connInfo,null);
     
    try {
       ChannelServices.RegisterChannel(channel,true);
    }
    C'est pas très simple parce qu'il faut trouver où est le pb de sécurité.
    Mais majoritairement, c'est un problème de user.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/12/2014, 07h51
  2. [Débutant] Comment utiliser Webkit.net ?
    Par Bastien_Witczak dans le forum VB.NET
    Réponses: 0
    Dernier message: 10/03/2013, 11h36
  3. [C#] Comment utiliser des dll win 32 dans un projet .NET
    Par Mickey.jet dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 31/05/2005, 13h45
  4. [CF][PPC/VB.NET] Comment utiliser les Socket avec Pocket PC ?
    Par joefou dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 17/05/2005, 14h24
  5. [VB.NET] Comment utiliser VScrollBar verticale
    Par stephane93fr dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/04/2005, 14h00

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