2

我们正在创建一个 WCF 基础结构,以允许组织中的其他系统使用我们的业务逻辑。其中一些逻辑与用户身份验证有关,因此保护服务是高度关注的问题。传输层由证书保护。我更关心保护业务层。

我们的一位客户按特定顺序调用这些服务,以支持业务流程。我想做的是建立一些机制来验证序列确实被保留了。该序列可能会因消费端的开发人员错误或试图破坏系统的攻击者而中断。我不想将流程的逻辑放在服务本身内部,因为这会将它们耦合到这个特定客户端的流程。我想将协调不同服务的逻辑放在一个单独的层中,这将是特定于客户端的(或者可能是更通用的东西来支持任何流程?)

有人可以指出讨论此问题的特定模式或资源吗?我在谷歌上搜索了半天,似乎找不到任何讨论这个特定问题的资源。

4

2 回答 2

2

我建议你把你的担忧分开。

拥有一个 Web 服务,其操作被调用以执行您的业务流程。

拥有第二个服务来协调您的业务流程并按所需顺序调用第一个服务的操作。

不要让第一个服务负责确保第二个服务以正确的顺序调用事物。调用顺序的责任应该属于不同的服务。

于 2013-06-24T18:40:08.987 回答
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传递给的最简单方法ServiceB.OperationB是调用ServiceA.OperationA.

于 2013-06-24T18:33:12.683 回答