2013-08-28 48 views
0

我对WCF中的一个场景感到困惑。基于客户端的暴露操作

我有WCF服务“SERVICE1”,它暴露两个操作“OP1”和“OP2”。

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

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

回答

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不太好做法....

+0

非常感谢......但我们是否有任何其他的方式,因为一个终点将被暴露在客户端? ..合同也将是相同的..我们不能通过相同的终点揭露两个合同... – Gopal

+0

首先 - 为什么你想要暴露的操作,以不能使用的客户端?这似乎是在寻求麻烦。如果您真的想这样做,您可以在每次执行这些操作时都放置授权逻辑,以确保只有经过授权的客户端才能使用它们。 (http://msdn.microsoft.com/en-us/library/ff647503.aspx) – Lawrence

+0

非常感谢......但是假设我们有一个合同,其中client1有6个操作,并且明天client2出现并说他只需要4个操作现有10个..我应该去为他创建一个单独的合同.means是否有必要为每个客户分别签订合同?有什么方法可以重用现有的合同吗? – Gopal