我开发了一个由三个.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服务。
答案 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) { }
}
然后您可以根据需要公开端点,例如像这样的东西:
您可以使用类似的行来支付DataContracts。合同负责确保不同的端点可以访问不同的操作和数据,而在底层他们将共享实现,最大限度地减少您需要做的工作量才能使其工作。