Внутренний обмен сообщениями Edge Extension: приложение UWP закрывается, если в браузер или расширение Edge не отправляется ответ

Каждый запрос от браузера Edge требует отправки соответствующего ответа. В противном случае сопутствующий UWP (и связанное с ним приложение Win32, если таковое имеется) завершит работу, указав в качестве причины «SystemPolicy». Чтобы проиллюстрировать проблему, я могу обратиться к образцу SecureInput .

    /// <summary>
    /// Receives message from Extension (via Edge)
    /// </summary>
    private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
    {
        AppServiceDeferral messageDeferral = args.GetDeferral();

        try
        {
            if (this.desktopBridgeAppLaunched)
            {
                this.currentConnectionIndex = Int32.Parse(sender.AppServiceName);
                this.desktopBridgeConnection = desktopBridgeConnections[this.currentConnectionIndex];

                // Send message to the desktopBridge component and wait for response
                AppServiceResponse desktopBridgeResponse = await this.desktopBridgeConnection.SendMessageAsync(args.Request.Message);
                await args.Request.SendResponseAsync(desktopBridgeResponse.Message);
            }
            else
            {
                throw new Exception("Failed to launch desktopBridge App!");
            }
        }
        finally
        {
            messageDeferral.Complete();
        }
    }

Если закомментировать строку, которая вызывает SendResponseAsync (...), UWP и приложение Win32 (PasswordInputProtection.exe) завершают работу из-за того, что обработчик OnAppServicesCanceled (...) вызывается с указанием причины SystemPolicy.

Я понимаю, что в этом конкретном примере не отправлять ответ бессмысленно. Но у меня есть сценарии, в которых нет необходимости отправлять ответ Edge Extension. Вместо этого я намерен использовать SendMessageAsync (...) из приложения Win32 для связи с расширением через приложение UWP.

Кроме того, я заметил, что образцы встроенного обмена сообщениями, которые я нашел в Интернете, отправляют по крайней мере бесполезное сообщение ACK обратно в расширение из UWP. Итак, это намеренно, что ответ должен быть отправлен, или я что-то здесь упускаю?


person raghurk    schedule 30.11.2017    source источник
comment
Я ожидал, что пустой ответ будет автоматически сгенерирован во время вызова messageDeferral.Complete () без вызова SendResponseAsync (). Я только что попробовал это здесь, и, похоже, он работает на моей машине. Мой тест был чистым сценарием AppService (не Edge Extension) и использовался в последней сборке Insider (я предполагаю, что вы используете 16299), так что это могут быть возможные различия между нашими двумя тестами. Позвольте мне связаться с ребятами из Edge Extension, чтобы увидеть, чего здесь может не хватать.   -  person Stefan Wick MSFT    schedule 05.12.2017
comment
Спасибо за ответ, Стефан. 1. Да, я на 16299. 2. Итак, вы хотите сказать, что вы пробовали одностороннюю асинхронную связь между двумя приложениями UWP (ни одно из которых не является EdgeExtension), и они работают нормально ?? Я не пробовал это. Однако я попытался отправить пустой ответ в SendResponseAsync (), и, к ужасу, сам EdgeBrowser постоянно вылетал. С нетерпением жду вашего ответа на Edge Extension + UWP   -  person raghurk    schedule 05.12.2017


Ответы (1)


Команда Edge исследовала это и подтвердила, что это ошибка в одном из своих компонентов. Они работают над исправлением для следующего обновления. Пока исправление не будет выпущено, вам нужно будет всегда отправлять ответ.

Благодарим за сообщение о проблеме и приносим извинения за возможные неудобства!

person Stefan Wick MSFT    schedule 15.12.2017