如何将 2 个或多个 Http 隧道(例如 ngrok)与 2 个或多个 .net 不同的应用程序(需要处理图形 api 的不同订阅)一起使用?
Posted
技术标签:
【中文标题】如何将 2 个或多个 Http 隧道(例如 ngrok)与 2 个或多个 .net 不同的应用程序(需要处理图形 api 的不同订阅)一起使用?【英文标题】:how to use 2 or more Http tunnels (e.g. ngrok) with 2 or more .net different apps (needed to handle different subscriptions for graph api)? 【发布时间】:2021-10-24 00:34:10 【问题描述】:我在过去几周开始工作(或尝试)Simple MVC-App 用于通知。
我使用了这个例子并用 ngrok 建立了 iP-tunnels ot localhost。(参见下面的示例和内容页面)。 https://docs.microsoft.com/de-de/learn/modules/msgraph-changenotifications-trackchanges/5-exercise-change-notification
https://github.com/microsoftgraph/msgraph-training-changenotifications/tree/live
如果我同时只在本地应用程序上运行一切都很好,但如果我要启动第二个通知应用程序 这条消息失败了
System.IO.IOException: Failed to bind to address https://127.0.0.1:5001: address already in use. ---> Microsoft.AspNetCore.Connections.AddressInUseException: Normalerweise darf jede Socketadresse (Protokoll, Netzwerkadresse oder Anschluss) nur jeweils einmal verwendet werden.
我在 ngrok.yml 文件中尝试了一些更改,但也无法访问。
# Create 3 tunnels, each for different ports, with only https enabled
# This way the ngrok process stays bellow the Free plan limit (4 tunnels)
authtoken: **************************
log: ngrok.log
tunnels:
first:
addr: 5000
proto: http
#host_header: localhost
second:
addr: 5000
proto: http
#host_header: localhost
我试图更改 appsetting.json 中的 url 但它不起作用:
"Logging":
"LogLevel":
"Default": "Debug"
,
"AllowedHosts":"*",
"MyConfig":
"AppId": "****************",
"AppSecret": "*********************",
"TenantId": "********",
"Ngrok": "https://76bd76a6aca4.ngrok.io"
但是在启动第一个应用程序后,第二个应用程序因异常而崩溃。 然后我尝试使用端口 5000 m 5010 等等并更改了launchsetting.json中的设置但我又失败了。
"msgraphapp":
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "api/values",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables":
"ASPNETCORE_ENVIRONMENT": "Development"
请有人告诉我我必须做什么,以便我可以在 localhost 上启动 2 个或更多应用程序,并使用 ngrok 或替代方案进行隧道传输。
【问题讨论】:
出于好奇,为什么在使用 Graph Change Notifications 时需要为同一个应用程序运行两个实例并为每个实例运行一个 Ngrok 隧道? @danstan:不是同一个应用程序和类似应用程序,用于通知其他订阅另一个资源的 webhook。确实不同的 GUID 不一样,但我需要不同的应用程序来处理不同的通知。最好的情况是可以在同一台电脑本地完成。我再次更改标题以使其更清晰。 @danstan;与我的通话记录通知的实际问题无关,一个应用程序运行在一个应用程序或 afew uswer 进行日志记录和测试是一种正常情况。如果那时需要在本地对另一个应用程序进行简短测试,有时可能会发生。是的,在完全不同的应用程序上,使用相同的隧道是没有问题的。但是 URL/api/notifications 是由微软修复的,所以如果我没记错的话,它们的 URi 是不可更改的。 【参考方案1】:您一定关注了Exercise - Azure AD apps .NET core web APIs。让两个应用程序运行并公开两个 Ngrok 隧道以获取图形更改通知
首先配置您的 ~/.ngrok2/ngrok.yml,如下所示。注意不同的端口。
authtoken: ****...***
tunnels:
first:
addr: 5000
proto: http
second:
addr: 5010
proto: http%
第二次编辑您的每个应用程序属性以具有不同的 http 和 https 绑定端口集。请参阅下面的屏幕截图,其中显示了每个文件的 launchSettings.json 设置。
这样您应该能够运行两个 .net 应用程序,每个应用程序都具有用于 MS 图形的 Ngrok 隧道。
记得在每个 appSettings 中添加正确的 Ngrok url
【讨论】:
乐于助人,尝试像截图一样设置,看看是否有效。您仍然可以参与评论以获得更好的理解。如果它解决了您的问题以帮助其他人,请考虑接受并支持答案。 谢谢,我做了大部分相同的事情,它适用于第一个应用程序。我没有选择多租户,我只选择了单租户。而且我不确定这些步骤: * dotnet add package Microsoft.Identity.Client * dotnet add package Microsoft.Graph * dotnet dev-certs https --trust 我想我忘记了最后一步,但我似乎可以工作。 ngrok.yml 中的 adddr:5000 我将第一个更改为 5001,然后更改为 5010(因为 https 的 lauchsetting 使用了 5001)我写了我试过这个。我尝试更改“applicationUrl”,但没有成功。我对 1 个应用程序使用了相同的应用程序注册。这会是个问题吗? 我不这么认为。每个应用程序(即使 appid 是同一个实例)都将从给定的applicationUrl
开始,并根据给定的Ngrok
url 处理通知。只要 .net 应用程序实例在不同的端口上运行并且 Ngrok url 隧道连接到相应的端口,它应该可以工作。
sorry 1 条评论是简短的:在 ngrok.yml 中,您使用端口 1st:5000 和 2nd:5001,但在 launchsettings.json 中,您使用 5000,5001 作为第一个和第二个 5010,5011。是复制粘贴错误吗?我昨天都试过了,没有将launchsettings.json更改为5010,它崩溃了,更改tro 5010,5011在启动时出现了另一个异常。我希望我可以试试你很快发布的这个例子,看看我的构建中是否有问题。
ngrok.yml
使用 5000 和 5010,launchsettings.json for app1
使用 localhost:5011;http://localhost:5010,launchsettings.json for app2
使用 localhost:5001;http://localhost:5000以上是关于如何将 2 个或多个 Http 隧道(例如 ngrok)与 2 个或多个 .net 不同的应用程序(需要处理图形 api 的不同订阅)一起使用?的主要内容,如果未能解决你的问题,请参考以下文章