Edge 브라우저의 모든 요청에 대해 응답을 보내야합니다. 그렇지 않은 경우, 동반자 UWP (및 연관된 Win32 App)가 이유로서 "SystemPolicy"를 인용하여 종료합니다. 이 문제를 설명하기 위해 SecureInput 샘플을 참조 할 수 있습니다. 호출하는 라인을 주석으로Edge Extension 네이티브 메시징 : Edge 브라우저/응답에 응답이없는 경우 UWP 앱이 닫힙니다.
/// <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에 응답을 보낼 필요가없는 시나리오가 있습니다. 대신 Win32 App에서 SendMessageAsync (...)를 사용하여 UWP App을 통해 Extension과 통신하려고합니다.
또한 온라인으로 발견 한 네이티브 메시징 샘플은 적어도 UWP에서 확장에 쓸모없는 ACK 메시지를 보냈습니다. 그래서, 응답을 보내야하거나 설계된 것이므로 여기에 뭔가 빠졌습니까?
내 기대는 sendResponseAsync()를 호출하지 않고 messageDeferral.Complete()를 호출 할 때 빈 응답이 자동으로 생성된다는 것입니다. 나는 방금 그것을 시험해 보았다. 그것이 그것이 나의 기계에서 일하는 것처럼 보인다. 내 테스트는 순수한 AppService 시나리오 (Edge Extension이 아님) 였고 최신 Insider 빌드 (16299에 있다고 가정)에서 두 테스트 간의 차이점이있을 수 있습니다. Edge Extension 담당자에게 무엇이 누락 될 수 있는지 살펴 보겠습니다. –
Stefan에게 답변 해 주셔서 감사합니다. 1. 예, 저는 16299에 있습니다. 2. 그래서 U는 두 개의 UWP 애플 리케이션 (둘 다 EdgeExtension이 아닌) 간의 비동기 통신 방식을 시도했으나 제대로 작동하지 않습니다. 나는 이것을 시도하지 않았다. 그러나 SendResponseAsync()에서 빈 응답을 보내려고했지만 놀랍게도 EdgeBrowser 자체가 계속 충돌합니다. Edge Extension + UWP에 대한 귀하의 회신을 기대합니다. – raghurk