0

我有一个内部接口,我需要通过 .NET 远程处理来实现,以确保只有我们的程序集远程调用这些成员(使用 InternalsVisibleTo 来授予对朋友程序集的访问权限)。但是,当我实现接口并构建它时,出现以下错误:

'AssemblyName' does not implement interface member 'InterfaceMember1(...)' 'AssemblyName' cannot implement an interface because it is not public. 

我无法搜索并找到一种方法来完成这项工作。但是,我明确实现了允许我的程序集构建的接口,并且我可以毫无问题地从任何朋友程序集中调用远程方法。

我担心我在这个主题上发现的信息缺乏,特别是在 MSDN 和 StackOverflow 上。通过内部接口实现 .NET 远程处理有什么问题吗?如果是这样,为什么?

编辑 这是我的界面和实现的样子:

界面

internal interface IAdmin
{
    bool TESTPING();
    bool AdminTask1(int val);
    ...
}

执行

public class RService : MarshalByRefObject, IAdmin
{
    //IAdmin members

    bool IAdmin.TESTPING()
    {
        return true;
    }

    bool IAdmin.AdminTask1(int val)
    {
        // do stuff
        return true;
    }
}
4

2 回答 2

1

MSDN: http: //msdn.microsoft.com/en-us/library/ms182313 (VS.80).aspx

接口方法具有公共可访问性,不能由实现类型更改。内部接口创建一个不打算在定义接口的程序集之外实现的协定。使用 virtual 修饰符实现内部接口方法的公共类型允许该方法被程序集外部的派生类型覆盖。如果定义程序集中的第二种类型调用该方法并期望一个仅限内部的协定,则当执行外部程序集中的重写方法时,行为可能会受到影响。这会产生安全漏洞。

于 2013-04-15T11:37:08.030 回答
1

您无法以这种方式实现安全功能。远程规范是开放的,因此任何人都可以创建消息,将其发送到您的远程班级并接收响应。您的服务无法可靠地确定是谁调用了它。

您可以实现自定义授权,并在每个方法调用中发送一个秘密令牌,以确保只有您的代码调用它。

于 2013-04-15T11:37:35.340 回答