在WCF服务中获取调用程序集名称

时间:2010-06-27 08:29:21

标签: wcf assemblies client

我正在努力实现以下目标: 每当执行服务调用时,我希望能够识别客户端。 我想通过迭代堆栈跟踪来获取调用程序集名称 但我没有得到客户端程序集名称。 示例代码:

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 个答案:

答案 0 :(得分:2)

我一定错过了一些东西:你是想通过装配来识别客户?为什么不使用身份验证?

此外,谁说客户甚至程序集?它可能是Java客户端,也可能是其他平台。

答案 1 :(得分:0)

当您的客户端调用WCF服务时,两者之间的所有内容都是序列化消息 - 要调用的方法以及要传入的所有参数。

服务器和客户端之间在运行时有没有其他连接。服务器无法“返回”并查看客户端 - 无连接

您可以查看的所有服务是序列化邮件和任何邮件标头。所以,如果你真的需要这个(你需要它做什么?)那么你需要确保客户端将某种标记/标识作为消息头放入调用中。