.net - 在 Azure App Services 应用程序中向 localhost 发出请求
问题描述
我有一个持续的网络作业,它监听包含诊断信息的请求。
为了测试连接性,我尝试在我的网络作业中进行健康检查,但无法根据 azure 应用服务文档向 localhost 发出请求。
下面的代码是我用来验证我可以从我部署的应用程序连接的代码:
var uri = new Uri("http://localhost:8989/ping");
var response = await client.GetAsync(uri);
我得到这个例外:
System.Net.Http.HttpRequestException: An error occurred while sending the request.
---> System.Net.WebException: Unable to connect to the remote server
---> System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions 127.0.0.1:8989
Web 作业是通过 Kudu (SCM) 的站点扩展安装脚本安装的,这意味着 Web 作业最终是 Kudu (SCM) 的子进程。启动时的 Web 作业应用程序将自身绑定到端口 8989。在 Windows 上本地启动应用程序,我可以毫无问题地进行健康检查。
azure 应用服务文档说,除非同一沙箱中的应用程序绑定到端口(https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#local-address- ,否则对 localhost 的请求将失败。请求)。
azure 应用程序服务文档指出 Kudu 与主应用程序在同一沙箱中运行 ( https://github.com/projectkudu/kudu/wiki/Kudu-architecture#security-model )。
如何通过 http 与我的网络作业进行通信?
最好是我可以从站点扩展安装过程中做的事情,但任何选项都是好的。
2019 年 12 月 26 日更新:
我试图强制 SCM 和主应用程序在同一个沙箱中运行WEBSITE_DISABLE_SCM_SEPARATION=true
(https://github.com/projectkudu/kudu/wiki/Configurable-settings#use-the-same-process-for-the-user-站点和 scm 站点)。
文档指出它们已经在同一个沙箱中运行,并且如果一个进程在同一个沙箱中侦听端口,那么这些请求应该可以工作。值得注意的是,实际的 SCM w3wp.exe 进程已经能够使用 http 访问 localhost 以执行我的 Web 作业。不过,这个设置似乎并没有改善这种情况。
2020 年 4 月 2 日更新:
我正式放弃了使用 Web 作业的想法,现在我将进程作为主应用程序实例的子进程启动。这使我可以毫无问题地进行交流localhost:8989
。
虽然我现在需要管理自己的保持活动逻辑。
如果可能的话,我仍然很想知道是否有一种方法可以通过 TCP 与网络作业进行通信。
解决方案
推荐阅读
- odoo - Odoo:如何在向表单“添加新行”后发送 message_post()
- c# - C# auto-insert data from SQL table to web application
- javascript - SQLite3 表仅包含 1 行
- apache - Visual Studio 更改默认侦听端口
- biztalk - 将参数传递给 BizTalk xslt 映射
- react-native - 如何在推送通知 React Native 中检测 Onpress
- reactjs - 延迟加载 i18n 反应问题
- sql - 搜索不完整的数据,对最佳匹配进行评分
- c# - 同一位置的多个列表视图对象
- javascript - iframe 调整大小:都在 FF 中损坏(是否有意)?