我们使用Azure APIM托管我们的SOAP服务,并将C#代码与服务端点集成并通过HttpClient进行调用。我们始终手动创建元素并将值添加到元素的内部文本中并将其作为字符串内容发送到服务。对于请求很少的元素来说很简单,但是当涉及到巨大的请求时,我们必须花费大量时间手动创建soap xml请求,这很耗时,容易出错?有没有更好的方法可以向APIM发送肥皂请求并解析肥皂反应?
答案 0 :(得分:0)
您可以使用APIManagementARMTemplateCreator
自动执行此操作,该操作将提取API的ARM模板以供CI / CD流程使用。
答案 1 :(得分:0)
您可以在向后端肥皂服务发送发送请求之前,在APIM> API操作中编写入站策略。
请找到以下参考文献。
<policies>
<inbound>
<base />
<rewrite-uri template="/your_soap_service_url.svc" copy-unmatched-params="false" />
<set-body template="none">@{
string message = context.Request.Body.As<String>(preserveContent:true);
try
{
you can write your logic here, if you want to manipulale your request
}
catch{}
string soapPacketStart = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:yourNamespace=\"namespace url, if you have namespace in your message">
<soap:Header xmlns:wsa=\"http://www.w3.org/2005/08/addressing\">
<wsa:Action>YourAction</wsa:Action>
<wsa:To>https://your_backend_url.svc</wsa:To>
</soap:Header>
<soap:Body>";
string soapPacketEnd ="</soap:Body>
</soap:Envelope>";
message = string.Format("{0}{1}{2}",soapPacketStart,message,soapPacketEnd); //your soap message is ready
return message;
}</set-body>
<set-header name="Content-Type" exists-action="override">
<value>application/soap+xml; Action="YourAction"</value>
</set-header>
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
//like wise you can set your response
</outbound>
<on-error>
<base />
</on-error>
</policies>