Ich habe einen fortlaufenden Webjob, der auf Anfragen mit Diagnoseinformationen wartet.
Um die Konnektivität zu testen, versuche ich, in meinem Webjob eine Integritätsprüfung durchzuführen, kann jedoch keine Anforderungen an localhost gemäß der Dokumentation der Azure App Services stellen.
Mit dem folgenden Code überprüfe ich, ob ich über die von mir bereitgestellte Anwendung eine Verbindung herstellen kann:
var uri = new Uri("http://localhost:8989/ping");
var response = await client.GetAsync(uri);
Ich bekomme diese Ausnahme:
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
Der Webjob wird über ein Installationsskript für Site-Erweiterungen über Kudu (SCM) installiert. Dies bedeutet, dass der Webjob letztendlich ein untergeordneter Prozess von Kudu (SCM) ist. Die Webjob-Anwendung bindet sich beim Start an Port 8989. Wenn ich die Anwendung lokal unter Windows starte, kann ich meine Integritätsprüfung problemlos durchführen.
In der Dokumentation zu den Azure App Services heißt es, dass Anforderungen an localhost fehlschlagen, es sei denn, eine Anwendung in derselben Sandbox wird an den Port gebunden ( https://github.com/projectkudu/kudu/wiki/Azure-Web-App-sandbox#local-address- Anfragen ).
In der Dokumentation zu den Azure App Services wird angegeben, dass Kudu in derselben Sandbox wie die Hauptanwendung ausgeführt wird ( https://github.com/projectkudu/kudu/wiki/Kudu-architecture#security-model ).
Wie aktiviere ich die Kommunikation mit meinem Webjob über http?
Am besten wäre es etwas, was ich mit einem Installationsprozess für Site-Erweiterungen tun könnte, aber alle Optionen sind gut.
Update 26.12.2019:
Ich habe versucht, SCM und die Hauptanwendung zu zwingen, in derselben Sandbox mit WEBSITE_DISABLE_SCM_SEPARATION=true
( https://github.com/projectkudu/kudu/wiki/Configurable-settings#use-the-same-process-for-the-user-) ausgeführt zu werden. site-and-the-scm-site ).
In der Dokumentation wird angegeben, dass sie bereits in derselben Sandbox ausgeführt werden und dass diese Anforderungen funktionieren sollten, wenn ein Prozess einen Port in derselben Sandbox überwacht. Bemerkenswert ist, dass der eigentliche SCM-Prozess w3wp.exe in der Lage war, localhost mit http für meinen Webjob zu treffen. Diese Einstellung schien die Situation jedoch nicht zu verbessern.
Update 04-02-2020:
Ich habe die Idee, einen Webjob zu verwenden, offiziell aufgegeben und beginne den Prozess jetzt als untergeordnetes Element der Hauptanwendungsinstanz. Dadurch kann ich problemlos kommunizieren localhost:8989
.
Obwohl ich jetzt meine eigene Keep-Alive-Logik verwalten muss.
Ich würde immer noch gerne wissen, ob es eine Möglichkeit gibt, über TCP mit einem Webjob zu kommunizieren, falls dies jemals möglich ist.
WebJobs
da sie in einem IHost
Container ausgeführt werden. Weitere Details finden Sie in meiner Antwort.