0

这很简单。我需要<URL>Apigee 服务标注 (SC) 中的元素作为动态元素。

例如:<URL>http://{dynamicURL}</URL>

WheredynamicURL将在运行时确定,并且每个请求的该值都不同。它将具有完整的目标 URL,例如 (ip:port/abc/orderid/1234)

<HTTPTargetConnection>
<Properties />
<URL>http://{dynamicURL}</URL>
</HTTPTargetConnection>

试过这些:

  • 在 JS 策略中,尝试servicecallout.{scpolicyname}.target.url在上下文中设置。在这种情况下,只有动态ip:port被发送。缺少 URI /abc/orderid/1234

  • AssignMessage策略中,创建了一个标头并尝试在 SC URL 元素中使用它,例如 request.header.name、{request.header.name},前面带有 $。

  • AssignMessage策略中,创建了一个变量并尝试在 SC 中使用它,就像{dynamicURL}前面一样$

这是一个常见的用例,我相信一定有一个简单的方法可以做到。需要你的帮助。

谢谢,

索木

4

2 回答 2

1

您可以结合使用 ServiceCallout 和 AssignMessage 策略。

您可以ip:port在 ServiceCallout 策略本身中设置。正如您所指出的,将此设置在 的元素<URL>http://{dynamicURL}</URL>中。<HTTPTargetConnection>

至于 URI 的其余部分,您可以使用 AssignMessage 策略<Path>元素。这是一个例子:

<AssignMessage enabled="true" continueOnError="false" async="false" name="GenerateAuthorizationPayload">
    <FaultRules/>
    <Properties/>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" type="request"/>
    <Set>
    <Payload contentType="text/xml">
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="urn:sample">
           <soapenv:Header/>
           <soapenv:Body>
              <v1:Login/>
           </soapenv:Body>
        </soapenv:Envelope>
    </Payload>
    <Path>/abc/orderid/1234</Path>
    <Verb>POST</Verb>
    </Set>
</AssignMessage>

如果您需要灵活性,您还应该能够{variable}在标签内部放置。<Path>

正是这两种策略的组合,您才能获得动态的ip:port/path.

于 2014-08-10T16:56:18.243 回答
0

考虑使用目标服务器。它更干净,它们是专门为您刚才描述的目的而设计的。此答案中的更多详细信息。

于 2014-08-10T16:30:44.867 回答