2013-08-28 152 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