У меня есть функция Azure, настроенная на прием веб-крючков и отправку уведомления pu sh на мой телефон, но оно очень темпераментное.
Это очень простая функция, скопированная почти напрямую из руководств Microsoft :
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "{root}/{topic}/")] HttpRequest req,
string root,
string topic,
ILogger log)
{
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
requestBody = HttpUtility.UrlDecode(requestBody);
requestBody = requestBody.Split('=').Last();
JObject payload = JObject.Parse(requestBody);
string subject = (string)payload["state"];
var notificationHubClient = new NotificationHubClient("Endpoint=sb://XXXXXX.servicebus.windows.net/;SharedAccessKeyName=DefaultFullSharedAccessSignature;SharedAccessKey=XXXXXXXXXXXXX","*HubName*");
var notificationResult =
await notificationHubClient.SendNotificationAsync(
new FcmNotification("{\"notification\":{\"title\":\"Update\",\"body\":\"There has been an update with one of your connections\"}}"));
log.Log(LogLevel.Information, "Notification delivered to {0} devices and failed {1} devices",
notificationResult.Success, notificationResult.Failure);
return new OkObjectResult(new object());
}
Основная проблема, похоже, связана с настройкой Notification Hub. Всякий раз, когда он получает веб-крючок, он выдает ошибку 500:
[24/04/2020 06:14:31] Host lock lease acquired by instance ID '000000000000000000000000E5F77906'.
[24/04/2020 06:14:49] Executing HTTP request: {
[24/04/2020 06:14:49] "requestId": "935576ac-a444-4f65-b128-cd0b8f0e77f2",
[24/04/2020 06:14:49] "method": "POST",
[24/04/2020 06:14:49] "uri": "/topic/basicmessages/"
[24/04/2020 06:14:49] }
[24/04/2020 06:14:50] Executing 'Aries' (Reason='This function was programmatically called via the host APIs.', Id=02433a6a-ee45-4f12-baf2-272958e5fb7a)
[24/04/2020 06:14:50] Executed 'Aries' (Failed, Id=02433a6a-ee45-4f12-baf2-272958e5fb7a)
[24/04/2020 06:14:50] System.Private.CoreLib: Exception while executing function: Aries. Microsoft.Azure.NotificationHubs: ExpiredToken: .TrackingId:97dcab31-c081-436a-b72c-4820d964335b_G0,TimeStamp:4/24/2020 7:14:50 AM.
[24/04/2020 06:14:50] Executed HTTP request: {
[24/04/2020 06:14:50] "requestId": "935576ac-a444-4f65-b128-cd0b8f0e77f2",
[24/04/2020 06:14:50] "method": "POST",
[24/04/2020 06:14:50] "uri": "/topic/basicmessages/",
[24/04/2020 06:14:50] "identities": [
[24/04/2020 06:14:50] {
[24/04/2020 06:14:50] "type": "WebJobsAuthLevel",
[24/04/2020 06:14:50] "level": "Admin"
[24/04/2020 06:14:50] }
[24/04/2020 06:14:50] ],
[24/04/2020 06:14:50] "status": 500,
[24/04/2020 06:14:50] "duration": 779
[24/04/2020 06:14:50]
В журнале отладки:
Exception thrown: 'System.UnauthorizedAccessException' in System.Private.CoreLib.dll
Телефон определенно настроен правильно, так как я могу отправлять тестовые уведомления с моего Azure Портал без проблем. В какой-то момент эта функция, казалось, работала через меня, абсолютно ничего не меняя (classi c), но затем я добавил некоторую дополнительную функциональность, и она снова сломалась.
Я пропустил дополнительный токен, кроме FullSharedAccessKey?