代码之家  ›  专栏  ›  技术社区  ›  François

azure-从arm json模板设置websocket

  •  1
  • François  · 技术社区  · 6 年前

    我正试图从一个部署我整个基础设施的Azure ARM JSON模板为一个Azure webapp打开websockets。

    以下是关于Azure Web应用程序的摘录。它不起作用,即WebSockets仍然关闭。我没有成功尝试不同的拼写: webSocketsEnabled WebSockets .

    "resources":[
    {
      "name": "[variables('MyApp')]",
      "type": "Microsoft.Web/sites",
      "location": "Brazil South",
      "apiVersion": "2016-08-01",
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', variables('MyAppPlanBrazil'))]"
      ],
      "tags": {
        "[concat('hidden-related:', resourceId('Microsoft.Web/serverfarms', variables('MyAppPlanBrazil')))]": "Resource",
        "displayName": "MyAppAppBrazil"
      },
      "properties": {
        "name": "[variables('MyAppPlanBrazil')]",
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('MyAppPlanBrazil'))]",
        "siteConfig": {
          "AlwaysOn": true,
          "webSocketsEnabled": true,
          "connectionStrings": [
            {
            ...
            },
            {
            ...
            },
          ]
        }
      }
     ] 
    

    更新

    正如下面的答案所建议的,我更新了 apiVersion "2016-08-01" 但这仍然不起作用。 还要注意,当我 schema 有描述吗 here , A版 在V中蠕动,它表示授权值为 "2015-08-01" 只有。

    更新2

    我尝试了下面的解决方案。他们为他们的作者工作,但不是为我工作。我想问题出在别处。我的基础结构已经部署,我尝试用 已启用WebSocketsEnabled . 而在下面的解决方案中,我设想作者直接用 已启用WebSocketsEnabled .

    还有,我耦合了 已启用WebSocketsEnabled 具有 alwaysOn 而我的webapp的定价层不允许“Alwayson”(在门户网站上说我需要升级才能使用该功能),所以我将尝试 总是这样 .

    更新3

    最后,当我移除模板时,上面的模板起作用。 AlwaysOn . 感谢那些帮助我的人。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Ed Elliott    6 年前

    将您的API版本设置为:“2016-08-01”

    使用

    “WebSocketsEnabled”:真

    这是来自microsoft.web/sites模板参考:

    https://docs.microsoft.com/en-us/azure/templates/microsoft.web/sites

    您使用的API版本(2015-08-01)来自:

    https://github.com/Azure/azure-resource-manager-schemas/blob/master/schemas/2015-08-01/Microsoft.Web.json

    其中没有Web套接字,但后面的一个:

    https://github.com/Azure/azure-resource-manager-schemas/blob/master/schemas/2016-08-01/Microsoft.Web.json

    是否启用了WebSocketsEnable。

        2
  •  1
  •   Tom Sun    6 年前

    请尝试使用以下代码。它在我这边工作正常。

    更新时间: 添加整个测试臂模板,您可以尝试将以下代码与 服务计划名称 资源组名称

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "serverFarmName": {
          "type": "string",
          "defaultValue": "YourPlan"
        },
        "serverFarmResourceGroup": {
          "type": "string",
          "defaultValue": "ResourceGroupName"
        }},
      "variables": {
        "ARMtemplateTestName": "[concat('ARMtemplateTest', uniqueString(resourceGroup().id))]"},
      "resources": [
        {
          "name": "[variables('ARMtemplateTestName')]",
          "type": "Microsoft.Web/sites",
          "location": "southcentralus",
          "apiVersion": "2015-08-01",
          "dependsOn": [ ],
          "tags": {
            "[concat('hidden-related:', resourceId(parameters('serverFarmResourceGroup'), 'Microsoft.Web/serverFarms', parameters('serverFarmName')))]": "Resource",
            "displayName": "ARMtemplateTest"
          },
          "properties": {
            "name": "[variables('ARMtemplateTestName')]",
            "serverFarmId": "[resourceId(parameters('serverFarmResourceGroup'), 'Microsoft.Web/serverFarms', parameters('serverFarmName'))]"
    
          },
          "resources": [
            {
              "name": "web",
              "type": "config",
              "apiVersion": "2015-08-01",
              "dependsOn": [
                "[resourceId('Microsoft.Web/sites', variables('ARMtemplateTestName'))]"
              ],
              "tags": {
                "displayName": "enableWebSocket"
              },
              "properties": {
                "webSocketsEnabled": true,
                "alwaysOn": true
              }
            },
            {
              "apiVersion": "2015-08-01",
              "name": "connectionstrings",
              "type": "config",
              "dependsOn": [
                "[resourceId('Microsoft.Web/Sites', variables('ARMtemplateTestName'))]"
              ],
              "properties": {
                "ConnString1": {
                  "value": "My custom connection string",
                  "type": "custom"
                },
                "ConnString2": {
                  "value": "My SQL connection string",
                  "type": "SQLAzure"
                }
              }
            },
            {
              "name": "appsettings",
              "type": "config",
              "apiVersion": "2015-08-01",
              "dependsOn": [
                "[resourceId('Microsoft.Web/sites', variables('ARMtemplateTestName'))]"
              ],
              "tags": {
                "displayName": "Appsetting"
              },
              "properties": {
                "key1": "value1",
                "key2": "value2"
              }
            }
          ]
        }],
      "outputs": {}
    }
    

    测试结果:

    enter image description here

        3
  •  1
  •   François    6 年前

    以上所有的解决方案都应该有效。

    我最初的代码片段也很管用…我一搬走 alwaysOn .

    实际上,我使用的是一个免费的应用程序服务计划, 总是这样 不可用。虽然没有错误或其他任何指示错误的内容,但我无法设置 webSocketEnabled 总是这样 同时在这种情况下。