1

I create a new Split-Join (in the OSB workshop application). Then I use an action "Invoke Service" to call a not secured business service. So far no problem. When I assign a security policy to my business service, the OSB does not accept. Here is the error message in the OSB workshop: [Parallel, Scope, Invoke Service] The WSDL Binding for BusinessService "OSB/1_0/BusinessServices/TestBS" is not supported: The service feature "WS-Security" is not supported. How can I call a secured business service in a splitJoin?

Thanks

4

2 回答 2

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)

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

如果通过 Split-Join 传递的消息已经有一些 SOAP 标头(包括策略),那么这些标头将会丢失,并且方法 #1 不起作用。

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

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

第二种方法更复杂,但也更强大。例如,它可以很容易地扩展为支持用户标题(Split-Join 也不支持它们),传递调试信息和几乎任何其他内容。

这种方法是在我的GenericParallel服务中实现的,它完成了以上所有工作。

我还有一篇博文概述了通过 Split-Join 传递 SOAP 标头的详细信息。(毕竟 WS_Policy 只是一个 SOAP 标头)。

于 2014-06-12T01:54:10.497 回答
0

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

于 2014-02-05T05:28:39.403 回答