Visual studio 2017 为什么在Visual Studio的Logic App Designer中选择现有连接时,会在我的JSON文件中添加新连接?

Visual studio 2017 为什么在Visual Studio的Logic App Designer中选择现有连接时,会在我的JSON文件中添加新连接?,visual-studio-2017,azure-logic-apps,Visual Studio 2017,Azure Logic Apps,我找不到任何关于这种行为的文章 我正在使用Visual Studio 2017和Logic App Designer。我有一个配置,在部署时使用参数文件可以完美地工作。当我在设计器中打开JSON时,它会显示“无效连接”,我可以选择现有连接或新连接。如果我选择现有的一个,该操作将再次启用并在studio中工作 但另一方面,在JSON文件中,创建了一个新的连接,它与前面的连接完全相同,但它被称为(在本例中)sftp_2—操作正在使用它。我试图更改对旧连接的所有引用,但它不起作用——它给了我同样的错误

我找不到任何关于这种行为的文章

我正在使用Visual Studio 2017和Logic App Designer。我有一个配置,在部署时使用参数文件可以完美地工作。当我在设计器中打开JSON时,它会显示“无效连接”,我可以选择现有连接或新连接。如果我选择现有的一个,该操作将再次启用并在studio中工作

但另一方面,在JSON文件中,创建了一个新的连接,它与前面的连接完全相同,但它被称为(在本例中)sftp_2—操作正在使用它。我试图更改对旧连接的所有引用,但它不起作用——它给了我同样的错误

它在我周五下班时起作用,但在我今天重新打开VisualStudio后就不起作用了。我是否需要先激活/重新打开旧连接

连接如下所示:

{
  "type": "MICROSOFT.WEB/CONNECTIONS",
  "apiVersion": "2016-06-01",
  "name": "[parameters('sftp_1_Connection_Name')]",
  "location": "[parameters('logicAppLocation')]",
  "properties": {
    "api": {
      "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('logicAppLocation'), '/managedApis/', 'sftp')]"
    },
    "displayName": "[parameters('sftp_1_Connection_DisplayName')]",
    "parameterValues": {
      "hostName": "[parameters('sftp_1_hostName')]",
      "userName": "[parameters('sftp_1_userName')]",
      "password": "[parameters('sftp_1_password')]",
      "sshPrivateKey": "[parameters('sftp_1_sshPrivateKey')]",
      "sshPrivateKeyPassphrase": "[parameters('sftp_1_sshPrivateKeyPassphrase')]",
      "portNumber": "[parameters('sftp_1_portNumber')]",
      "giveUpSecurityAndAcceptAnySshHostKey": "[parameters('sftp_1_giveUpSecurityAndAcceptAnySshHostKey')]",
      "sshHostKeyFingerprint": "[parameters('sftp_1_sshHostKeyFingerprint')]",
      "disableUploadFilesResumeCapability": "[parameters('sftp_1_disableUploadFilesResumeCapability')]"
    }
  }
},
以下是其中一项行动:

"Get_file_content": {
                      "type": "ApiConnection",
                      "inputs": {
                        "host": {
                          "connection": {
                            "name": "@parameters('$connections')['sftp_1']['connectionId']"
                          }
                        },
                        "method": "get",
                        "path": "/datasets/default/files/@{encodeURIComponent(encodeURIComponent(parameters('sftp_1_filepath'),items('For_each')?['Name']))}/content",
                        "queries": {
                          "inferContentType": true
                        }
                      },
                      "runAfter": {}
                    }
最后是连接阵列:

"$connections": {
        "value": {
          "sftp_1": {
            "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('logicAppLocation'), '/managedApis/', 'sftp')]",
            "connectionId": "[resourceId('Microsoft.Web/connections', parameters('sftp_1_Connection_Name'))]",
            "connectionName": "[parameters('sftp_1_Connection_Name')]"
          },
          "filesystem": {
            "id": "[concat(subscription().id, '/providers/Microsoft.Web/locations/', parameters('logicAppLocation'), '/managedApis/', 'filesystem')]",
            "connectionId": "[resourceId('Microsoft.Web/connections', parameters('filesystem_1_Connection_Name'))]",
            "connectionName": "[parameters('filesystem_1_Connection_Name')]"
          }
        }
      }
这是应用程序流程的逻辑

这背后的原因是Visual Studio Logic Apps Designer没有检查此连接器使用的连接是否在Logic app的其他位置或Azure中使用。因此,在这种情况下,现在旧的API连接仍然在Azure中的某个地方使用,它会创建一个额外的API连接(本例中为sftp_2)

设计器帮助您发现“动态内容”。然而,要做到这一点,它需要在开发阶段而不是部署阶段创建API连接

作为覆盖,Visual studio Designer中的此连接意味着在保存时,它将在Azure中被覆盖。因为在Visual Studio中工作时,您已经在使用Azure中部署的对象,例如连接

如果发生这种情况,我通常使用Ctrl+H组合键,将新连接替换为旧连接的名称,并删除对旧连接的任何引用—这是一项繁琐的工作

至于我的问题,它变成了鸡蛋和鸡的问题。您正试图设置命名约定,但如果由设计器进行设置,则在可以设置命名约定之前会创建API连接。如果您在JSON中工作,这可以通过参数实现,但是设计器看起来像是坏了一样。无法生成该参数,因此它仅修改连接名称

这里的连接器名为
blob-3221
,但我必须使用名为
CustomVariableName
CustomName
的参数。我已经在代码中突出显示了自定义的位置。所以这里说azureblob_1_连接的名称是
blob-3221
,显示名称是
blob test

其中有两个已声明但未使用的值:

在部署时,它将获得以下值:

将删除诸如
blob-3221
之类的占位符值,并插入自定义前缀名称。

不带前缀的名称的参数文件。

您的意思是您选择了现有连接“sftp_1”,但创建了“sftp_2”?我在你的json文件中没有看到“sftp_2”。这正是我的意思。我注意到我上传了一个文件共享连接字符串,但这是正确的。sftp_1_-connection工作正常,但只要我选择它作为操作,就会创建一个sftp_2_-connection。因此我想知道是什么导致了这种行为。损坏的JSON文件?它肯定会验证,但可能是其他错误触发了这个问题?你的逻辑应用程序看起来像什么?你可以分享图片。您的意思是选择sftp_1连接,然后添加操作,然后创建sftp_2或sftp_1更改为sftp_2?并检查您的资源组,是否在那里创建了sftp_2?如果它和sftp_1一样?@GeorgeChen,是的,这真的很奇怪。我一直使用相同的凭证。目前我的解决方法是直接在Json中工作,而不是使用Logic App Designer。当我完成后,我将它部署到Azure,瞧,一切都很完美。我猜这背后一定有一些奇怪的配置,导致Logic App Designer崩溃:)