首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过.NET远程处理实现内部接口

问通过.NET远程处理实现内部接口
EN

Stack Overflow用户
提问于 2013-04-15 11:32:49
回答 2查看 632关注 0票数 0

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

代码语言:javascript
复制
'AssemblyName' does not implement interface member 'InterfaceMember1(...)' 'AssemblyName' cannot implement an interface because it is not public. 

我找不到办法把这件事做好。但是,我显式地实现了允许我的程序集构建的接口,并且我可以在没有任何问题的情况下调用来自任何朋友程序集的远程方法。

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

这里的编辑是我的接口和实现的样子:

接口

代码语言:javascript
复制
internal interface IAdmin
{
    bool TESTPING();
    bool AdminTask1(int val);
    ...
}

实现

代码语言:javascript
复制
public class RService : MarshalByRefObject, IAdmin
{
    //IAdmin members

    bool IAdmin.TESTPING()
    {
        return true;
    }

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-15 11:37:35

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-04-15 11:37:08

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16014106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档