我们有一组现有的REST API(.NET Core(。我们需要将这些 API 公开为 SOAP 服务,希望通过使用 Azure API 管理。这可能吗?
我看过很多关于将 SOAP 服务公开为 REST API 的文章,但不是相反。
当您在 APIM 中将 API 作为 REST 时,它所做的只是为操作创建一堆策略,以动态处理请求/响应有效负载并将 JSON 转换为 XML。即使没有向导来创建反向转换 - 这肯定是可能的。
您必须使用 APIM 策略编写自己的转换逻辑。以下是您需要的一些东西:
- set-body 策略 https://learn.microsoft.com/en-us/azure/api-management/api-management-transformation-policies#SetBody 将 JSON bosy 替换为 XML 和其他方式。看到它支持液体模板,这可能会派上用场。
- 它没有记录(出于某种原因(,但在策略表达式中,您可以使用上下文。Request.Body.AsSoap(( 获取当前请求的 ISoapMessage (与 Response 相同(。这是这个界面:
public enum SoapVersionLiteral { Soap11, Soap12 } public interface ISoapMessage { SoapVersionLiteral Version { get; set; } string Action { get; set; } IEnumerable<ISoapHeader> Headers { get; set; } ISoapBody Body { get; set; } } public interface ISoapHeader { XName Name { get; } string Value { get; } Uri Actor { get; } bool MustUnderstand { get; } } public interface ISoapBody { XName Name { get; } XElement Contents { get; } }
- 您可以尝试在野外找到一些 WSDL,并将它们作为 SOAP 导入到 APIM 中的 REST 中,以查看创建了哪种策略来将 XML 转换为 JSON 以进行响应,将 JSON 转换为 XML 以用于请求。