我已经创建了一个带有本机消息传递的Microsoft Edge扩展,但我无法使其与非持久连接一起工作。
给定here的示例在我的特定情况下没有用处:
示例(随机数生成器)显示了当服务器已经运行时,两个UWP应用程序如何在客户端与服务器通信的位置进行通信。在Edge Extensions with Native Messaging (我的是基于数字签名和安全输入示例)中,我有一个W32应用程序,当消息通过扩展从页面到达时,服务器没有运行。
我已经检查了我能找到的所有here示例,但没有一个使用我需要的“非持久”连接:
我也尝试过在我的Edge扩展中使用runtime.sendNativeMessage,但这只适用于第一条消息。
我没有交互式html页面,用户可以通过该页面启动与runtime.connectNative的连接。这就是为什么它必须是一个“非持久”连接,使用runtime.sendNativeMessage从原生应用程序到start/query/get-response,方式类似于Chrome和Firefox使用的方式。
发布于 2019-08-22 15:49:32
Edge中没有用于持久化和非持久化连接的单独API。唯一的区别是:对于持久连接,我们将在成功建立连接后保持连接打开。我们可以关闭它,直到任务完成。请参考此sample。
但是,对于非持久性连接,我们将在接收到响应并将其存储为AppServiceResponse时立即释放连接。This sample非常清楚,我们可以看到AppServiceConnection对象只存在于一个连接。
希望这能有所帮助。
发布于 2019-10-19 01:24:55
我现在已经解决了这个问题,并将我的Edge扩展从持久连接扩展转换为非持久连接扩展。
假设您从一个类似于here的扩展开始,将该扩展转换为非持久化扩展的核心思想如下:
最后一步,将与连接/断开连接相关的所有JavaScript代码从content.js中删除,并将启动win32应用程序的调用从OnBackgroundActivated()转移到OnAppServiceRequestReceived()
Windows.ApplicationModel.FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync(),当我们实际收到来自Edge的消息时。
// Send message to the win32 application component and wait for response
AppServiceResponse centennialResponse = await this.centennialConnection.SendMessageAsync(args.Request.Message);
await args.Request.SendResponseAsync(centennialResponse.Message);在后台脚本和后台任务之间没有建立会话或持久连接。
由于上述变化,我们的扩展的可靠性有了很大的提高。
https://stackoverflow.com/questions/57576523
复制相似问题