診断情報を含むリクエストをリッスンする継続的なWebジョブがあります。
接続をテストするために、Webジョブでヘルスチェックを実行しようとしましたが、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-リクエスト)。
Azureアプリサービスのドキュメントには、Kuduがメインアプリケーションと同じサンドボックスで実行されると記載されています(https://github.com/projectkudu/kudu/wiki/Kudu-architecture#security-model)。
http経由でWebジョブとの通信を有効にするにはどうすればよいですか?
できれば、サイト拡張機能のインストールプロセスでできることですが、どのオプションでもかまいません。
アップデート12-26-2019:
SCMとメインアプリケーションをWEBSITE_DISABLE_SCM_SEPARATION=true
(https://github.com/projectkudu/kudu/wiki/Configurable-settings#use-the-same-process-for-the-user- site-and-the-scm-site)。
ドキュメントには、それらがすでに同じサンドボックスで実行されており、プロセスが同じサンドボックスのポートでリッスンする場合、それらのリクエストは機能するはずであると記載されています。注目に値するのは、実際のSCM w3wp.exeプロセスが、私のWebジョブでhttpを使用してlocalhostをヒットできることです。ただし、この設定では状況は改善されないようです。
更新04-02-2020:
私は公式にWebジョブを使用することを断念し、メインアプリケーションインスタンスの子としてプロセスを開始しました。これによりlocalhost:8989
、問題なく通信できます。
今は自分のキープアライブロジックを管理する必要があります。
可能であれば、TCPを介してWebジョブと通信する方法があるかどうかを知りたいです。
WebJobs
内で実行されるため、有効になっていませんIHost
。追加の詳細は私の答えにあります。