エッジブラウザからのすべてのリクエストに対応する応答を送信する必要があります。そうでない場合、付随するUWP(および関連付けられているWin32 App(存在する場合))は理由として「SystemPolicy」を引用して終了します。 問題を説明するために、SecureInputサンプルを参照できます。 "SendResponseAsync(...)" 呼び出す行をコメントアウトすることでエッジエクステンションネイティブメッセージング:エッジブラウザ/エクステンションに返信が返されない場合、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();
}
}
、UWPとWin32アプリケーション(PasswordInputProtection.exeは)ハンドラが呼び出されているため、 "OnAppServicesCanceled(...)" で出ていますSystemPolicyの理由で
この特定の例では、応答を返信しないことは意味がないことを理解しています。しかし、Edge Extensionに返信する必要がないシナリオがあります。代わりに、Win32 AppからSendMessageAsync(...)を使用して、UWP Appを介してExtensionと通信するつもりです。
また、オンラインで見つけたネイティブメッセージングサンプルは、少なくとも無駄なACKメッセージをUWPからエクステンションに送り返していることに気付きました。だから、レスポンスを送る必要があるのか、ここに何かを見逃すのは設計上のものなのでしょうか?
私の期待は、SendResponseAsync()を呼び出さずにmessageDeferral.Complete()を呼び出したときに空のレスポンスが自動生成されるということです。私はここでそれを試したところ、それは私のマシン上で動作しているようです。私のテストは純粋なAppServiceシナリオ(Edge Extensionではない)でしたが、最新のInsiderビルド(私はあなたが16299にいると仮定しています)では、2つのテストの間に異なる可能性があります。 Edge Extensionの皆さんに何が欠けているのかを見てみましょう。 –
あなたの応答Stefanに感謝します。 1.はい、私は16299になります。 2. Uは2つのUWPアプリケーション間で片方向の非同期通信を試みました(どちらもEdgeExtensionではありません)。私はこれを試していない。しかし、SendResponseAsync()で空のレスポンスを送信しようとしましたが、EdgeBrowser自体が一貫してクラッシュしています。 Edge Extension + UWPであなたの返信を楽しみにしています – raghurk