通过.NET Remoting实现内部接口

时间:2013-04-15 11:32:50

标签: c# .net .net-remoting internalsvisibleto

我有一个内部接口,我需要通过.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;
    }
}

2 个答案:

答案 0 :(得分:1)

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

  

接口方法已公开   可访问性,无法更改   按实施类型。一个内部   界面创建一个合同   不打算在外面实施   定义的组件   接口。一种公共类型   实现内部的方法   使用虚拟修饰符的界面   允许方法被覆盖   一个派生类型,在...之外   部件。如果是第二种类型   定义程序集调用方法和   期待内部合同,   行为可能会受到影响,   相反,被覆盖的方法   外部装配执行。这个   创建了一个安全漏洞。

答案 1 :(得分:1)

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

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