1

我开发了一个由三个 .NET Web 服务客户端使用的 WCF 应用程序。到现在为止还挺好。

但是现在我应该更改 WCF 应用程序,以便将不同的架构发布到不同的客户端。

例如:

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

    public Order GetOrderInfo(string orderId) {}

    public Payment GetPaymentDetails(Order order) {}
}

我的一个客户不应该看到GetPaymentDetails(我基本上应该从那个客户创建的 WSDL 中隐藏这个 GetPaymentDetails 和 Payment 类模式)。其他客户将对其他方法有限制。

在某些情况下,Payment即使客户端有权访问操作,某些类的属性也不应该暴露给客户端GetPaymentDetails

有什么方法可以为不同的客户公开不同的模式,并且在我的最后需要最少的更改?

要记住一件事:我的服务是使用 WCF 开发的,而使用我的服务的客户端使用传统的 .NET Web 服务。

4

1 回答 1

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 端点

您可以对 Payment DataContracts 采取类似的做法。合约负责确保不同的端点可以访问不同的操作和数据,而在幕后它们将共享实现,从而最大限度地减少实现该功能所需的工作量。

于 2012-11-04T10:46:56.897 回答