gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:36:17 28 4
gpt4 key购买 nike

我有一个带有服务器“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;
}
}

但是当我真正想要客户端(调用者)AppDomain Id 时,由此检索到的 DomainId 与服务器 AppDomain.CurrentDomain.Id 相同

感觉这太难了:-)

有什么想法吗?

最佳答案

您可以要求他们在通话上下文中放入某种票证吗?如果可以的话,就很容易识别调用者并采取相应的行动。也许这不是最好的解决方案,但应该可行。我们做到了,我认为它仍在产品中;)

关于reflection - 远程处理:从服务器 AppDomain 查找客户端 AppDomain/程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2105554/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com