使用ARM模板在Azure APIM

时间:2018-01-15 22:28:38

标签: azure soap azure-api-management

我正在尝试使用ARM模板在Azure APIM中自动执行SOAP传递API部署。 以下是我遵循的步骤:

  1. 通过导入WSDL文件在azure门户上创建API。
  2. 使用“自动化脚本”从APIM实例生成和下载API的ARM配置。
  3. 为以下资源提取此ARM模板并对其进行参数化:
    • Microsoft.ApiManagement /服务/ API的
    • Microsoft.ApiManagement /服务/ API的/操作
    • Microsoft.ApiManagement /服务的/ apis /模式
    • Microsoft.ApiManagement /服务/产品/ API的
  4. 使用Visual Studio(2017)在Azure上部署ARM模板。
  5. 成功部署API及其相关操作等。但是,我观察了以下两件事:

    • Azure APIM未将此API标记为SOAP。
    • API端点不起作用:我在尝试访问时始终获得404.

    这是API的ARM模板:

    {
    	"comments": "= = = API = = =",
    	"type": "Microsoft.ApiManagement/service/apis",
    	"name": "[concat(variables('apimInstanceName'), '/', parameters('apiName'))]",
    	"apiVersion": "2017-03-01",
    	"scale": null,
    	"properties": {
    	"displayName": "[parameters('apiName')]",
    	"apiRevision": "1",
    	"description": "SOAP service",
    	"serviceUrl": "[parameters('serviceUrl')]",
    	"path": "[parameters('apiName')]",
    	"protocols": [
    	  "http",
    	  "https"
    	],
    	"authenticationSettings": null,
    	"subscriptionKeyParameterNames": null,
    	"type": "soap",
    	"isCurrent": true,
    	"apiType":  "soap"
    	},
    	"dependsOn": [
    	]
    }

    我还没有发布其他组件的ARM模板,只是为了检查这篇文章的长度。

    我是否遗漏了API模板中的任何内容以使其按预期工作?

1 个答案:

答案 0 :(得分:0)

这可能不再相关,但我遇到了类似的问题。在配置 SOAP 端点时,我使用以下模板来配置 SOAP 传递 API。

最初,它作为 SOAP 提供给 REST,并将操作名称附加到 URL 的末尾。然后我将 "apiType": "soap" 添加到模板中,它按预期工作。

在我的模板中,我使用最新的 API 版本 "apiVersion": "2020-12-01",并通过将其作为字符串传递来导入 WSDL 文档。在理想情况下,您可以使用 "format": "wsdl-link" 从位于 API 管理本身后面的 API 导入架构。

{
    "type": "Microsoft.ApiManagement/service/apis",
    "apiVersion": "2020-12-01",
    "name": "[variables('soapApiName')]",
    "properties": {
        "displayName": "Inventory SOAP API",
        "path": "InventoryService.svc",
        "protocols": [
            "https"
        ],
        "type": "soap",
        "apiType": "soap",
        "subscriptionRequired": false,
        "format": "wsdl",
        "value": "[parameters('wsdlDocument')]"
    }
}