问题描述
在传递给客户端之前,我想更改肥皂响应的输出格式。我正在使用文档https://azure.microsoft.com/en-ca/blog/soap-pass-through/
中指定的肥皂直通此示例中使用的肥皂服务托管在 https://fazioapisoap.azurewebsites.net/FazioService.svc?singleWsdl
我无法提取液体模板中的肥皂响应。确实会生成肥皂响应,但是没有数据。
此代码有什么问题吗?
(u <*> v) = (u >>= \f -> v >>= \x -> pure (f x))
解决方法
您不必为命名空间添加前缀。此请求有效
<set-body template="liquid">
<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<GetOpenOrdersResponse xmlns="http://tempuri.org/">
<GetOpenOrdersResult xmlns:a="http://schemas.datacontract.org/2004/07/FazioAPISoap" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
{% for summary in body.Envelope.Body.GetOpenOrdersResponse.GetOpenOrdersResult.OrderSummary -%}
<OrderSummary>
<order_id>
{{summary.order_id}}
</order_id>
</OrderSummary>
{% endfor -%}
</GetOpenOrdersResult>
</GetOpenOrdersResponse>
</s:Body>
</s:Envelope>
</set-body>
我可以看到您的请求有两个潜在问题。
- 您可能缺少
SOAPAction
标头,例如submitOrder
<set-header name="SOAPAction" exists-action="override">
<value>http://tempuri.org/IFazioService/submitOrder</value>
</set-header>
- 此外,您可能需要设置后端url并重写资源的路径(如果APIM路径不同于SOAP服务)
<set-backend-service base-url="{{s-iserve-store-inventory-backend-url}}" />
<rewrite-uri template="?" copy-unmatched-params="false" />