如何在 Visual Studio 中的不同端口上运行 Azure Function 应用程序

Posted

技术标签:

【中文标题】如何在 Visual Studio 中的不同端口上运行 Azure Function 应用程序【英文标题】:How to run Azure Function app on a different port in Visual Studio 【发布时间】:2017-12-12 02:42:27 【问题描述】:

我在 local.setting.json 中设置本地主机端口。参考微软文档https://docs.microsoft.com/en-us/azure/azure-functions/functions-run-local

文件如下所示


  "IsEncrypted": false,
  "Values": 
    "AzureWebJobsStorage": "",
    "AzureWebJobsDashboard": ""   
  ,
  "Host": 
    "LocalHttpPort": 7073
  

当我运行/调试解决方案时,VS 仍然在默认端口 (7071) 上托管应用程序

我检查了 bin 目录,local.setting.json 文件通过上述设置到达那里。 从 bin 目录运行 Azure Fucntion CLI (func host start) 正确读取端口号。

看起来 VS 没有使用"LocalHttpPort" 端口。设置中是否需要进行任何其他更改。我有 Visual Studio 2017 Preview (2)

【问题讨论】:

在 VS2017 15.9.5 中使用 Microsoft.NET.Sdk.Functions v1.0.26 你的方法工作得很好。 【参考方案1】:

更新:如果您只是想更改端口,则不必通过问题中指定的文件进行设置。检查Thuc Nguyen answer

原答案:

命令行优先于设置文件,问题是VS在命令行上传递了一个明确的端口。

解决方法是通过project -> properties -> Debug,然后在Application arguments 下控制参数。你可以输入host start --pause-on-error

从 ravinsp 编辑:

.Net Core 2.0 功能项目更新:

您必须传递的命令行参数不同。您必须将路径传递给前面的dll。像这样: %AppData%\..\Local\Azure.Functions.V2.Cli\2.0.1-beta.22\Azure.Functions.Cli.dll host start --pause-on-error您可以通过在Visual Studio中运行该函数并使用进程资源管理器查看命令行参数来查看dotnet.exe进程。

编辑:一个词

【讨论】:

唉,这不适用于 .NET Core 2.0 版本的 Functions 工具,仅适用于 .NET Framework 版本。 在 .Net Core 2.0 中,您必须将以下内容作为命令行参数。我在通过 VS 运行该功能时通过进程资源管理器发现了这一点。将其放在“应用程序参数”字段中:C:\Users\\AppData\Local\Azure.Functions.V2.Cli\2.0.1-beta.22\Azure.Functions.Cli.dll 主机启动 --端口 8888 --pause-on-error 对于 .Net Core 2.0 的 VS 2017 15.9.4,我在 local.settings.json 文件的末尾添加了以下 json "host":"LocalHttpPort":7073。接下来,我在项目/属性/调试中创建了一个新的项目配置文件并将其应用程序参数设置为: start --port 7073 --pause-on-error 。请注意,配置文件设置为“项目”不可执行。这允许我拥有多个测试配置文件。使用此设置,当我将解决方案属性配置设置为多个时,我可以在 Visual Studio 的调试中同时运行多个 Azure Functions。 使用 VS 2019 和函数 2.22.0,这已更改为:%LOCALAPPDATA%\AzureFunctionsTools\Releases\2.22.0\cli\func.exe" host start --port 7071 --pause -on-error【参考方案2】:

当您通过 NPM 安装 Azure Functions Core Tools 2.x Runtime 时,Visual Studio 2017 中 .NET Core 2.0 / .NET Standard 2.0 Azure Functions 项目的正确答案

我关注了@ahmelsayed 的回答,特别是@ravinsp 的.net core 2.0 cmets 的cmets。虽然非常有帮助并使我走上正轨,但如果没有关键且非直观的修改,它们对我不起作用,所以我添加了一个新的答案。

TL;DR;

如果你使用 NPM 安装 Azure Functions Core Tools 2.x Runtime,那么你可能需要将 Project/Properties/Debug/Application Arguments 设置为:

C:\Users\<myuserid>\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin\func.dll host start --port 8888 --pause-on-error

下面是长答案...

我的设置

在本练习中,我的设置完全是最新的(在撰写本文时),如下所示:

Visual Studio 2017 专业版:15.6.2 Azure Functions 和 Web 作业工具:15.0.40215.0 Windows 10 10.0.16299 内部版本 16299

Azure Functions Core Tools(根据 Microsoft 的 Develop and run Azure functions locally 文档安装)报告(在 Git Bash 中):

me@MYDESKTOP ~ $ func <snip/> Azure Functions Core Tools (2.0.1-beta.24) Function Runtime Version: 2.0.11587.0

fwiw,Azure 上此 Functions App 的 Functions App 设置选项卡显示:

Runtime version: 2.0.11587.0 (beta)

我的问题

当我运行我的函数项目(没有应用程序参数)时,我在控制台输出中得到了这个:

[17/03/2018 21:06:38] Starting Host (HostId=MYMACHINE, Version=2.0.11353.0, ProcessId=<snip/>
Listening on http://localhost:7071/

这本身可能不是问题,但我越来越讨厌“在我的机器上工作,发布到 azure 时失败”类型的问题,所以我想确保本地执行使用与运行时相同的函数天蓝色(即 2.0.11587.0,根据上面的设置说明,它是/应该是,对吧?)

因此,根据@ravinsp 的说明,我在我的 C 驱动器上运行查找以找到 Azure.Functions.Cli.dll - 只有一个,它位于 C:\Users\&lt;myuserid&gt;\AppData\Local\Azure.Functions.V2.Cli\2.0.1-beta\Azure.Functions.Cli.dll,这似乎与 @ravinsp 的答案非常一致。

所以,我添加了以下项目/属性/调试/应用程序参数:

C:\Users\<myuserid>\AppData\Local\Azure.Functions.V2.Cli\2.0.1-beta\Azure.Functions.Cli.dll host start --port 8888 --pause-on-error

然后我得到端口 8888,但奇怪的是运行时 仍然被报告为 2.0.11353。

[17/03/2018 21:13:02] Starting Host (HostId=MYMACHINE, Version=2.0.11353.0, ProcessId=<snip/>
Listening on http://localhost:8888/

解决方案

鉴于按照上述从 Git Bash 运行的 func 显示运行时为 2.0.11587.0,我尝试了 which func,它返回了 /c/Users/<myuserid>/AppData/Roaming/npm/func 。我在上面做了一只猫,长话短说,我可以看到它最终运行的是C:\Users\&lt;myuserid&gt;\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin\func.exe,并且在同一个目录中有一个func.dll

所以,我尝试了以下项目/属性/调试/应用程序参数:

C:\Users\<myuserid>\AppData\Roaming\npm\node_modules\azure-functions-core-tools\bin\func.dll host start --port 8888 --pause-on-error

那我终于明白了……

[17/03/2018 21:16:29] Starting Host (HostId=MYMACHINE, Version=2.0.11587.0, ProcessId=<snip/>
Listening on http://localhost:8888/

而且,至关重要的是,我在发布到 Azure 时遇到的错误也开始在本地表现出来。

好的,现在运行时都同步了,是时候开始修复我的实际错误了 :)

【讨论】:

【参考方案3】:

我使用了已接受的答案,但在调试器端口尝试绑定时仍然出现错误,因为两个函数应用都尝试绑定到 5858。

为了解决这个问题,我在项目设置中为应用程序参数添加了一个属性,我的参数如下所示:

host start --pause-on-error --nodeDebugPort 5860

【讨论】:

【参考方案4】:

我使用的是 CLI 版本 1.2.1,Project Properties -&gt; Debug 中的以下 Application arguments 设置对我有用。

host start --port 7074 --nodeDebugPort 5860

【讨论】:

这对我有用。此页面上针对我的问题的最简单解决方案。 应该是真正的答案,我特别想同时调试至少 2 个函数,并且需要最好的方法来告诉每个函数在哪个端口上运行 我认为这也是标题中问题的正确答案。接受的答案是解决作者遇到的特定问题,但标题更通用,这个答案更合适。 为什么这不是公认的答案?非常感谢! :) 我也喜欢这个方案,简单,好控制。【参考方案5】:

更新项目属性 -> 调试到以下

主机启动 --port 7073 --pause-on-error

【讨论】:

我可以确认这适用于 V3 函数和 VS 2019。【参考方案6】:

如果您使用 Visual Studio for MacOS,请右键单击您的项目,单击选项,单击 Run -&gt; Configurations -&gt; Default 并在参数字段中输入 host start --port 7073 --pause-on-error

【讨论】:

【参考方案7】:

这样做

选择 Function App Project in Visual Studio -&gt; Hit Alt+Enter 并导航到调试设置并设置

host start --port 8085 --nodeDebugPort 6890

【讨论】:

【参考方案8】:

截至此版本:

Azure Functions Core Tools (3.0.2912 Commit hash: bfcbbe48ed6fdacdf9b309261ecc8093df3b83f2)
Function Runtime Version: 3.0.14287.0

您只需在应用程序参数框中输入start --port 7074

【讨论】:

这是 Functions v3, Visual Studio 2019+ 的正确答案【参考方案9】:

这是我在 local.settings.json 文件中使用不同端口的方式,同时在 Intellij 中运行它。您也可以使用任何其他 IDE,local.settings.json 无处不在。


  "IsEncrypted": false,
  "Values": 
    "FUNCTIONS_WORKER_RUNTIME": "java"
  ,
  "Host": 
    "LocalHttpPort": 7072
  ,
  "ConnectionStrings": 

【讨论】:

以上是关于如何在 Visual Studio 中的不同端口上运行 Azure Function 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 2010 在 C# 中的两台不同机器上运行的客户端和服务器之间的通信

如何强制 Visual Studio 在 https 中运行网站

终端中的 Git 版本与 Visual Studio Code 中的不同

如何在 Visual Studio 中混合不同编译器版本的程序:?

如何在一个 Visual Studio 解决方案中的 2 个内部 API 之间发出 API 请求?

在 Visual Studio 2013 中调试不同解决方案中的多个项目