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