获取WCF服务内的调用程序集名称
我正在努力实现以下目标: 无论何时执行服务调用,我都希望能够识别客户机。 我考虑通过迭代堆栈跟踪来获取调用程序集名称 但我无法获取客户端程序集名称。 示例代码:获取WCF服务内的调用程序集名称,wcf,assemblies,client,Wcf,Assemblies,Client,我正在努力实现以下目标: 无论何时执行服务调用,我都希望能够识别客户机。 我考虑通过迭代堆栈跟踪来获取调用程序集名称 但我无法获取客户端程序集名称。 示例代码: private List<System.Reflection.Assembly> GetCallingAssemblies() { List<System.Reflection.Assembly> assemblies = new List<System.Refle
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;
}
private List GetCallingAssemblies()
{
列表程序集=新列表();
StackTrace StackTrace=新的StackTrace(0,true);
对于(int i=0;i
我肯定遗漏了什么:您试图通过程序集识别客户端?为什么不使用身份验证
此外,谁说客户甚至有集会?它可能是Java客户机或其他平台。当您的客户机调用WCF服务时,两者之间的所有内容都是序列化消息—要调用的方法和要传递的所有参数 运行时,服务器和客户端之间没有其他连接。服务器无法“返回”并查看客户端-没有连接
您的服务只能查看序列化消息和任何消息头。因此,如果您真的需要它(您需要它做什么??),那么您需要确保客户端将某种标记/标识作为消息头放入呼叫中。好的,我会解释这一点。有几个客户端(它们都有程序集)。该服务当前具有用于所有客户端的方法。我希望能够通过识别请求服务的客户机来划分服务。不可能将服务拆分为几个小服务,尽管这可能是更好的选择。例如,假设方法A只对客户端B和C可用。如何确保客户端D无法使用它?这就是身份验证和授权的用途。例如,您可以将服务划分为只有具有给定角色或声明的经过身份验证的客户端才能访问。您能提供一些示例吗?