【问题标题】:Exposing operations based on client暴露基于客户端的操作
【发布时间】:2013-08-28 10:43:28
【问题描述】:

我真的对 WCF 中的一个场景感到困惑。

我在 WCF 服务“SERVICE1”上有两个操作“OP1”和“OP2”。

有两个客户端在使用“CLIENT1”和“CLIENT2”服务。

条件是“CLIENT1”只能调用“OP1”,而“CLIENT2”只能调用“OP2”。

【问题讨论】:

    标签: wcf wcf-security


    【解决方案1】:

    重构您的服务合同以公开两个端点,其接口仅与使用它的客户端相关:

       [ServiceContract]
        public interface IService1
        {
            [OperationContract]
            void OperationOne();
        }
    
        [ServiceContract]
        public interface IService2
        {
            [OperationContract]
            void OperationTwo();
        }
    
        public class MyServcie: IService1, IService2
        {
            //Implementation here...
        }
    

    这样IService1 的客户端甚至都不知道IService2 上的方法存在。

    这不仅限于 WCF - 这也是 OOP 中的好习惯....

    【讨论】:

    • 非常感谢...但是我们还有其他方法吗?因为一个端点将暴露给两个客户端..所以合同也将是相同的..我们不能同时暴露两个通过同一端点签订合同...
    • 首先 - 为什么要将操作公开给无法使用的客户端?这似乎是在自找麻烦。如果你真的想这样做,你可以将授权逻辑放在这些操作的每个实现中,以确保只有授权的客户端才能使用它们。 (msdn.microsoft.com/en-us/library/ff647503.aspx)
    • 非常感谢...但是假设我们有一份合同,客户 1 有 6 次操作,明天客户 2 来说他只需要现有 10 次操作中的 4 次。我应该去创建一个单独的合同吗对他来说..意味着是否有必要为每个客户签订单独的合同?有没有办法重用现有的合同?
    • 这些都是非常好的问题,并强调需要非常仔细地考虑您公开的公共合同,在这里讨论太棒了。重要的是,合同不应受制于客户的需求,而应反映服务的功能。而且,“需要”不等于“禁止”。如果客户端 2 只需要 4 次操作,那么您不需要更改任何内容 - 如果您的服务禁止它,那是另一回事。这是一个庞大的主题 - 抱歉,我无法详细说明!
    猜你喜欢
    • 2019-03-23
    • 2017-04-16
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多