我们正在创建一个WCF基础架构,以允许组织中的其他系统使用我们的业务逻辑。其中一些逻辑与用户身份验证有关,因此保护服务非常重要。传输层由证书保护。我更关注保护业务层。
我们的一个客户按特定顺序调用这些服务,以支持业务流程。我想做的是建立一些机制来验证序列确实保留。消费者方面的开发者错误或试图破坏系统的攻击者可能会破坏序列。我不想将过程的逻辑放在服务本身中,因为这会将它们耦合到这个特定的客户端进程。我想将用于协调不同服务的逻辑放在一个单独的层中,这将是客户特定的(或者可能更通用的东西支持任何过程?)
有人能指出我讨论这个问题的具体模式或资源吗? 我一直在谷歌搜索半天,我似乎找不到任何讨论这个特定问题的资源。
答案 0 :(得分:2)
大多数Web服务都应该被设计为独立调用,因为无法保证调用者将构成它们的顺序。
有人说,鼓励按顺序调用它们的一种方法是使用类似于Fluent Interface的设计,其中服务A返回一个对象,该对象是服务B的输入参数。
[DataContract]
public class ServiceAResult
{
// ...
}
[DataContract]
public class ServiceBResult
{
// ...
}
[ServiceContract]
public interface IServiceA {
[OperationContract]
public ServiceAResult OperationA() {
// ...
}
}
[ServiceContract]
public interface IServiceB {
[OperationContract]
public ServiceBResult OperationB(ServiceAResult input) {
// ...
}
}
此处,创建传递给ServiceAResult
的{{1}}的最简单方法是致电ServiceB.OperationB
。
答案 1 :(得分:2)
我建议你分开你的顾虑。
拥有一个可以调用其操作的Web服务,以执行您的业务流程。
提供第二项服务,协调您的业务流程,并按所需顺序调用第一项服务的操作。
不要让第一项服务负责确保第二项服务以正确的顺序调用事物。呼叫顺序的责任应该属于不同的服务。