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;
}
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? –
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é. –
Pouvez-vous s'il vous plaît me fournir un échantillon? –