我正在努力实现以下目标: 每当执行服务调用时,我希望能够识别客户端。 我想通过迭代堆栈跟踪来获取调用程序集名称 但我没有得到客户端程序集名称。 示例代码:
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;
}
答案 0 :(得分:2)
我一定错过了一些东西:你是想通过装配来识别客户?为什么不使用身份验证?
此外,谁说客户甚至有程序集?它可能是Java客户端,也可能是其他平台。
答案 1 :(得分:0)
当您的客户端调用WCF服务时,两者之间的所有内容都是序列化消息 - 要调用的方法以及要传入的所有参数。
服务器和客户端之间在运行时有没有其他连接。服务器无法“返回”并查看客户端 - 无连接。
您可以查看的所有服务是序列化邮件和任何邮件标头。所以,如果你真的需要这个(你需要它做什么?)那么你需要确保客户端将某种标记/标识作为消息头放入调用中。