J'ai un déclencheur de minuterie
[FunctionName("AspNetCoreHost")] public Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, Route = "{*all}")]HttpRequest req, [AspNetCoreRunner(Startup = typeof(Startup))] IAspNetCoreRunner aspNetCoreRunner, ExecutionContext executionContext) { return aspNetCoreRunner.RunAsync(executionContext); }
Et un déclencheur HTTP
[FunctionName("HeathChecker")] public static void Run([TimerTrigger("*/10 * * * * *")]TimerInfo myTimer, ILogger log) { log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); }
Je voudrais pouvoir obtenir le nom d'hôte où le Le déclencheur HTTP est en cours d'exécution, je peux donc l'appeler avec HTTP à partir du déclencheur de la minuterie. Est-ce possible?
3 Réponses :
Vous pourriez obtenir le nom d'hôte avec:
Environment.GetEnvironmentVariable("WEBSITE_HOSTNAME")
Vous pouvez vérifier la valeur dans votre Function Kudu ( https://sitename.scm.azurewebsites.net ), sélectionnez le menu "Environnement", il y a WEBSITE_HOSTNAME
ou SERVER_NAME
.
Je cherchais un moyen d'utiliser le SDK, pour éviter de supposer que l'hôte de la fonction s'exécutait sur des sites Web Azure.
@Poul K. Sørensen, que voulez-vous dire vide en supposant que l'hôte de la fonction s'exécutait sur des sites Web Azure? Même si vous exécutez la fonction sur le local, cela fonctionne toujours. Il lit l'environnement. Et le WEBSITE_HOSTNAME
est un environnement d'exécution azure, vous pouvez donc l'obtenir uniquement pendant que vous utilisez azure sdk.
L'hôte peut fonctionner sur ma machine locale et également sur d'autres frameworks. Il ne fonctionne pas toujours sur les fonctions Azure. L'hôte de la console écrit dans la journalisation là où il écoute, donc les informations doivent être là. Vous vous demandez s'il existe une dépendance que l'on peut résoudre qui contient les informations.
@Poul K. Sørensen, vouliez-vous dire le magasin d'informations le nom d'hôte?
J'ai trouvé un moyen de le faire, en créant une extension de fonction azure: github.com/DotNetDevOps/DotNETDevOps.Extensions.AzureFunctio ns /…
@Poul K. Sørensen, avez-vous testé? Qu'est-ce que vous obtenez?
j'ai le localhost: l'URL du port, cela fonctionne. Mais à la recherche de quelque chose où je n'ai pas besoin de faire une extension. Ce serait bien de dépendre simplement d'un service / d'une classe déjà dans le cadre de la fonction.
@Poul K. Sørensen, C'est le même sortie sur le local que l'environnement. Juste celui-ci utilise IWebHookProvider
. Et il semble ne pas avoir à utiliser cette extension, car il utilise toujours le sdk webjob pour l'implémenter.
Êtes-vous en train de déclarer que lorsque vous faites cela sur Azure, il renvoie également localhost? Ce n'est pas un problème cependant, la question initiale était de savoir comment appeler la fonction elle-même à partir du déclencheur de minuterie pour la maintenir en vie.
@Poul K. Sørensen, non, sur local: le port il montre local et sur azur il affichera site.azurewebsites.net.
Merci, je vais essayer de dépendre de IWebHookProvider pour voir si le code client peut l'obtenir.
@Poul K. Sørensen, si cela fonctionne, vous pouvez poster votre réponse et la marquer comme réponse.
Vous pouvez également obtenir le nom d'hôte à partir de l'objet HttpRequest req
:
HostString hostString = req.Host; string host = hostString.Host; int? port = hostString.Port; string fullHost = hostString.Value;
Quelqu'un sait où trouver l ' Host
pour les fonctions Python? L'essai de req.Host
entraîne Une exception s'est produite: l'objet 'HttpRequest' n'a pas d'attribut 'Host'
Je viens de vérifier ceci et j'ai découvert que le nom de la variable d'environnement a changé. Voici ce qui fonctionne maintenant:
Environment.GetEnvironmentVariable("WEBSITE_SITE_NAME")
Je viens de découvrir que ma réponse ne vous donne que la partie sous-domaine de l'URL entière. WEBSITE_HOSTNAME vous donnera donc le nom de domaine complet, tandis que WEBSITE_SITE_NAME vous en donnera juste la première partie. Désolé s'il y avait une confusion.
Voulez-vous dire l'URL de la fonction lorsqu'elle est déployée sur Azure?