Получить имя вызывающей сборки внутри службы WCF - PullRequest
0 голосов
/ 27 июня 2010

Я пытаюсь добиться следующего: всякий раз, когда выполняется вызов службы, я хочу иметь возможность идентифицировать клиента.Я думал о получении имени вызывающей сборки путем перебора трассировки стека, но мне не удалось получить имя сборки клиента.Пример кода:

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;
        }

Ответы [ 2 ]

2 голосов
/ 27 июня 2010

Я должен что-то упустить: вы пытаетесь идентифицировать клиента по сборкам?Почему бы не использовать аутентификацию?

Кроме того, кто сказал, что клиент даже имеет сборок?Это может быть клиент Java или какая-то другая платформа.

0 голосов
/ 27 июня 2010

Когда ваш клиент вызывает службу WCF, все, что идет между ними, это сериализованное сообщение - метод для вызова и все параметры для передачи.

Существует нет другого соединения во время выполнения между сервером и клиентом. Сервер не может "добраться до" и посмотреть на клиента - нет соединения .

Все, что может посмотреть ваша служба - это сериализованное сообщение и любые заголовки сообщений. Так что если вам действительно это нужно (для чего вам это нужно?), Тогда вам нужно убедиться, что клиент вставляет маркер / какую-то идентификацию в качестве заголовка сообщения в вызов.

...