2010-06-27 4 views
0

J'essaie d'obtenir ce qui suit: chaque fois qu'un appel au service est effectué Je veux être en mesure d'identifier le client. J'ai pensé à obtenir le nom de l'assembly appelant en itérant sur la trace de la pile mais je n'ai pas réussi à obtenir le nom de l'assembly client. Exemple de code:Obtenir le nom de l'assembly d'appel dans le service WCF

private List<System.Reflection.Assembly> GetCallingAssemblies() 
     { 

      List<System.Reflection.Assembly> assemblies = new List<System.Reflection.Assembly>(); 

      StackTrace stackTrace = new StackTrace(0, true); 

      for (int i = 0; i < stackTrace.FrameCount; i++) 
      { 

       StackFrame stackFrame = stackTrace.GetFrame(i); 

       System.Reflection.MethodBase methodBase = stackFrame.GetMethod(); 

       Type type = methodBase.ReflectedType; 
       System.Reflection.Assembly assembly; 
       if (type != null) 
       { 
        assembly = System.Reflection.Assembly.GetAssembly(type); 
        if (assemblies.Contains(assembly) == false) 
        { 
         assemblies.Add(assembly); 
        } 
       }     
      } 
      return assemblies; 
     } 

Répondre

2

je dois manquer quelque chose: vous essayez d'identifier le client à travers des assemblées? Pourquoi ne pas utiliser l'authentification?

En outre, qui dit que le client a même a assemblées? Ce peut être un client Java ou une autre plate-forme.

+0

OK, je vais vous expliquer cela. Il y a plusieurs clients (ils ont tous des assemblages à coup sûr). Le service dispose actuellement de méthodes pour TOUS les clients. Je veux être capable de compartimenter le service en identifiant le client qui demande le service. Il n'y a aucune possibilité de diviser le service en plusieurs petits, bien que ce soit le meilleur choix. Par exemple, supposons que la méthode A ne soit disponible que pour les clients B et C. Comment puis-je m'assurer que le client D sera incapable de l'utiliser? –

+0

C'est pour cela que l'authentification et l'autorisation sont utilisées. Par exemple, vous pouvez délimiter des services uniquement accessibles aux clients authentifiés avec un rôle ou une revendication donné. –

+0

Pouvez-vous s'il vous plaît me fournir un échantillon? –

0

Lorsque votre client appelle un service WCF, tout ce qui va entre les deux est le message sérialisé -. La méthode d'appel et de tous les paramètres à passer dans

Il n'y a pas autre connexion à l'exécution entre le serveur et client. Le serveur ne peut pas "revenir" et regarder le client - il y a pas de connexion.

Tout ce que votre service peut voir est le message sérialisé et les en-têtes de message. Donc, si vous en avez vraiment besoin (qu'est-ce que vous en avez besoin pour ??), alors vous devez vous assurer que le client met un marqueur/identification de quelque sorte comme en-tête de message dans l'appel.

Questions connexes