Reflection 远程处理:从服务器AppDomain查找客户端AppDomain/程序集

Reflection 远程处理:从服务器AppDomain查找客户端AppDomain/程序集,reflection,remoting,appdomain,Reflection,Remoting,Appdomain,我有一个带有服务器“AppDomain”的应用程序,它接受来自不同AppDomain的调用(这些AppDomain托管插件,由其他人开发,不可信) 在服务器AppDomain中,我需要知道哪个“插件”(AppDomain)实际在进行调用,以便确保该插件能够访问资源 我可以直接将凭据传递给远程处理方法调用,但我担心这样做时,“插件a”的狡猾程序员可能会更改代码,使其看起来像是来自“插件B” 我已经考虑在服务器应用程序上创建我自己的“ObjRef”实现,认为“ChannelInfo.ChannelD

我有一个带有服务器“AppDomain”的应用程序,它接受来自不同AppDomain的调用(这些AppDomain托管插件,由其他人开发,不可信)

在服务器AppDomain中,我需要知道哪个“插件”(AppDomain)实际在进行调用,以便确保该插件能够访问资源

我可以直接将凭据传递给远程处理方法调用,但我担心这样做时,“插件a”的狡猾程序员可能会更改代码,使其看起来像是来自“插件B”

我已经考虑在服务器应用程序上创建我自己的“ObjRef”实现,认为“ChannelInfo.ChannelData”可能包含进行调用的客户端插件的信息,并实现了以下代码:

public int DomainId
    {
        get
        {
            int domainId = -1;

            // The type "System.Runtime.Remoting.Channels.CrossAppDomainData" is not Public,
            // so we have to use reflection to get access to it.
            for (int i = 0; i < ChannelInfo.ChannelData.Length; i++)
            {
                object o = ChannelInfo.ChannelData[i];
                if (o.ToString() == "System.Runtime.Remoting.Channels.CrossAppDomainData")
                {
                    System.Reflection.BindingFlags flags =
                        System.Reflection.BindingFlags.GetProperty
                        | System.Reflection.BindingFlags.Instance
                        | System.Reflection.BindingFlags.NonPublic;

                    domainId = (int)o.GetType().GetProperty("DomainID", flags).GetValue(o, null);
                }
            }
            return domainId;
        }
    }
public int-DomainId
{
得到
{
int domainId=-1;
//类型“System.Runtime.Remoting.Channels.CrossAppDomainData”不是公共的,
//所以我们必须使用反射来访问它。
对于(int i=0;i
但是,当我真正需要客户端(调用方)AppDomain Id时,它检索到的DomainId与服务器AppDomain.CurrentDomain.Id相同

感觉这太难了:-)


有什么想法吗?

你能让他们在通话内容中加入一些提示吗? 如果可以,识别呼叫者并据此采取行动将很容易。 也许这不是最好的解决方案,但应该有效。我们做了一些,我想它还在生产中;)