【问题标题】:Bi-directional communication between .NetCore 3 and UWP processes.NetCore 3 和 UWP 进程之间的双向通信
【发布时间】:2020-03-18 17:24:04
【问题描述】:

我们正在使用 .Net Core 3 开发应用程序。但是,我们的依赖项之一仅支持 UWP。到目前为止,我们的计划是为我们的大部分逻辑设置一个“主”.Net Core 3 进程,并为连接到所需库的一个“侧”UWP 进程。

目前已调查:

  • IPC(匿名/命名管道),由于 UWP 应用在自己的沙盒中运行,因此无法正常工作
  • App Services 理论上应该可以工作......但即便如此,他们似乎还是依赖 UWP 应用作为“主机”,因为连接是由 UWP 特定的 FullTrustProcessLauncher 启动的。

总之,是否有某种方法可以实现 .Net Core 3 进程和 UWP 进程之间的双向关系,其中 .Net Core 3 是“父”进程?

【问题讨论】:

  • 您是否调查过消息代理?像 RabbitMQ 之类的?
  • 或者可能是本地套接字以避免另一个单点故障(消息代理)?

标签: c# .net visual-studio .net-core uwp


【解决方案1】:

我们正在使用 .Net Core 3 开发应用程序。但是,我们的依赖项之一仅支持 UWP。到目前为止,我们的计划是为我们的大部分逻辑创建一个“主”.Net Core 3 进程,并为连接到所需库的一个“副”UWP 进程。

一般来说,我们有两种方式在 UWP 平台内进行通信。一种是App Services,它需要FullTrustProcessLauncher 在uwp 与桌面应用程序通信之前运行应用程序。

另一个是Launch an app for resultsWindows 10 中的新应用到应用通信 API 使 Windows 应用(和 Windows Web 应用)能够启动应用并交换数据和文件。这使您能够从多个应用程序构建混搭解决方案。使用这些新的 API,需要用户使用多个应用程序的复杂任务现在可以无缝处理。例如,您的应用可以启动社交网络应用以选择联系人,或启动结帐应用以完成付款流程。您可以从 .Net Core 3 流程启动 UWP 应用,然后重新启动。

【讨论】:

  • 我猜选项 1 将被排除,因为 FullTrustProcessLauncher 是特定于 UWP 的,因此不能从 .NET Core 3.0 中使用。虽然第二个选项可能很有希望。不过需要证明。
  • 如果我们希望 .NET Core 应用程序启动并与 UWP 控制台应用程序对话,那么本教程似乎无法解决问题。本教程是关于相反的场景:从 UWP 启动应用程序,因为 LaunchUriForResultsAsync 仅在 UWP 中有效 - 除非 .NET Core 3.0 中存在相当于“为结果启动应用程序”的功能(我似乎找不到)。
  • 要使用LaunchUriForResultsAsync api,您需要将Windwos.winmd 库添加到您的项目中,您可以找到具有此路径C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.18362.0 的winmd 文件。
  • 谢谢 - 按照您的建议,设法让 LaunchUriForResultsAsync 从 .NET Core 3.0 打开 UWP 应用程序。但是这种方法只会启动另一个应用程序;它不会在两个应用程序之间创建双向通信通道。一旦第二个进程启动,我们希望能够随时从进程 1 到 2 发送信息,反之亦然。我认为现在留给我们的唯一选择是本地套接字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-27
  • 1970-01-01
  • 2016-10-10
相关资源
最近更新 更多