Каждый запрос от браузера 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. Итак, это намеренно, что ответ должен быть отправлен, или я что-то здесь упускаю?