Использование Notification Hub в Azure функции, выбрасывающей UnauthorizedAccessException - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть функция 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?

...