OSB - Split-Join呼叫安全Web服务

时间:2014-01-07 20:23:45

标签: parallel-processing soa osb

我创建了一个新的Split-Join(在OSB研讨会应用程序中)。然后 我使用“调用服务”操作来调用非安全的业务服务。到目前为止没问题。当我为我的业务服务分配安全策略时,OSB不接受。以下是OSB研讨会中的错误消息: [并行,范围,调用服务] 不支持BusinessService“OSB / 1_0 / BusinessServices / TestBS”的WSDL绑定:不支持服务功能“WS-Security”。 如何在splitJoin中调用安全的业务服务?

由于

2 个答案:

答案 0 :(得分:1)

我会对user2364825的正确答案进行更多扩展。

Split-Join实际上是旧产品的“窗口”(这就是为什么它的外观和行为与OSB不同)。该产品有一些限制,包括无法使用WS_POLICY。

有两种常用的解决方法。

方法#1。创建一个剥离了WS_POLICY的相同WSDL的版本,并在Split-Join中使用它。从Split-Join中,使用剥离的WSDL调用中间代理,后者又使用原始WSDL调用业务服务。

BizService(Stripped WSDL)->Split-Join->Proxy2(Stripped WSDL)->BizService(Real WSDL)

只有在OSB代码创建WS_POLICY标头时,该方法才有效。

如果通过Split-Join发送的消息已经有一些SOAP标头(包括策略),那些将会丢失,方法#1无效。

方法#2。创建一个自定义WSDL,它包含原始消息及其所有SOAP标头和诸如此类的东西。将该WSDL用于Split-Join,将包装好的消息传递给解包代理,然后调用真正的proxy / biz。

BizService(Wrapper WSDL)->Split-Join->Proxy2(Wrapper WSDL)->BizService(Real WSDL)

第二种方法更复杂,但也更强大。例如,它可以轻松扩展以支持用户标头(Split-Join也不支持它们),传递调试信息以及其他任何内容。

这种方法是在我的GenericParallel服务中实现的,该服务可以完成上述操作以及更多内容。

我还有一篇博文,其中详细介绍了passing the SOAP Headers via Split-Join。 (毕竟,WS_Policy只是一个SOAP Header。)

答案 1 :(得分:0)

你永远不能调用WSDL中定义了WS_POLICY的基于WSDL的代理/业务服务。您需要有一个中间业务/代理来将消息传递给包含WSDL服务的WS-policy。