Web服务协调

时间:2013-06-24 14:55:20

标签: wcf web-services design-patterns orchestration

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

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

有人能指出我讨论这个问题的具体模式或资源吗? 我一直在谷歌搜索半天,我似乎找不到任何讨论这个特定问题的资源。

2 个答案:

答案 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服务,以执行您的业务流程。

提供第二项服务,协调您的业务流程,并按所需顺序调用第一项服务的操作。

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