2012-11-04 54 views
1

我開發了一個由三個.NET Web服務客戶端使用的WCF應用程序。到現在爲止還挺好。爲不同的客戶端公開不同的WSDL

但是現在我應該改變WCF應用程序,使不同的模式發佈到不同的客戶端。

例如:

class A : IMyServices 
{ 
    public string GetName() {} 

    public Order GetOrderInfo(string orderId) {} 

    public Payment GetPaymentDetails(Order order) {} 
} 

我的一個客戶不應該看到GetPaymentDetails(我應該基本上隱藏正在由一個客戶端創建的WSDL這種GetPaymentDetails及支付類架構)。其他客戶將對其他方法有所限制。

在某些情況下,Payment類的某些屬性不應公開給客戶端,即使它有權訪問GetPaymentDetails操作。

是否有任何方法可以爲不同的客戶端公開不同的模式,並且在我的最後需要最少的更改?

有一點要記住:我的服務是使用WCF開發的,而使用我的服務的客戶端使用傳統的.NET Web服務。

回答

1

如何爲各種合約拆分接口並暴露不同的端點(可能具有不同的安全性)?您可以按照以下方式設計合同和實施:

[ServiceContract] 
public interface ICompleteService : IBasicService, IPaymentService 
{ } 

[ServiceContract] 
public interface IBasicService 
{ 
    string GetName(); 
    Order GetOrderInfo(string orderId); 
} 

[ServiceContract] 
public interface IPaymentService 
{ 
    Payment GetPaymentDetails(Order order); 
} 

class A : ICompleteService 
{ 
    public string GetName() { } 
    public Order GetOrderInfo(string orderId) { } 

    public Payment GetPaymentDetails(Order order) { } 
} 

然後,您可以根據需要公開端點,是這樣的:

  • IBasicService端點最低安全
  • ICompleteService端點與最大的安全性

你可以沿着類似的路線爲付款DataContracts去。合同負責確保不同的端點能夠訪問不同的操作和數據,而在底層,他們將共享實現,最大限度地減少爲實現此目標而需要做的工作量。

+0

但我仍然不明白如何控制不同客戶的類中的屬性.. –

相關問題