为不同的客户端公开不同的WSDL

时间:2012-11-04 06:19:54

标签: .net wcf web-services c#-4.0 wsdl

我开发了一个由三个.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服务。

1 个答案:

答案 0 :(得分: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。合同负责确保不同的端点可以访问不同的操作和数据,而在底层他们将共享实现,最大限度地减少您需要做的工作量才能使其工作。