【发布时间】:2011-11-19 21:35:45
【问题描述】:
如果您的 UI 前端是使用适用于 Windows 8 的新 Metro 风格应用程序构建的,并且希望它与在同一台本地计算机上的桌面上运行的 .NET 应用程序(例如 Windows 服务应用程序)进行通信)。
metro 应用和桌面应用之间可以使用哪些形式的进程间通信?
感谢 Visual Studio 团队的 Pavel Minaev,他在评论中提供了一些初步信息,引用:
根据 Martyn Lovell 的说法,没有任何刻意的机制 那,以及一些可以用于它的东西是故意限制的。 例如,命名管道不存在,内存映射文件也不存在。 有套接字(包括服务器套接字),但是当连接到 localhost,您只能连接到同一个应用程序。你可以正常使用 共享“已知文件夹”之一(文档、图片等)中的文件, 但这是一个相当粗暴的 hack,需要轮询并且是 对用户可见。 -- Pavel Minaev评论this issue
因此,我考虑使用 Web 服务或读取/写入数据库以实现某种形式的通信,但如果无法使用常规方法,当进程在同一台机器上运行时,这两者似乎都过大了。
我在这里尝试的有意义吗?我可以看到需要 Metro 应用程序作为在桌面上运行的现有服务的前端 UI。还是只将 WPF 用于在桌面上运行的前端 UI(即非 Metro 应用程序)更好。
【问题讨论】:
-
本地 WCF 服务怎么样?
-
@Gleno 将在问题中涉及“考虑使用 Web 服务”。也就是说,我确实想知道它是否会起作用 - 如果 .NET Core 中提供的 WCF 客户端库的实现是建立在 WinRT 套接字之上的,那么大概会应用相同的“无 localhost”限制。这需要检查。
-
由于 Metro 的限制,看起来 WCF 的 NetNamedPipeBinding 和 NetTcpBinding(通过 localhost)无论如何都不可用。那会留下 Web 服务或 MSMQ 绑定吗?老实说,我不确定 WCF 本身是否可以在 Metro 中使用。
-
让我把你的问题转过来问你:如果你正在与之通信的桌面服务不存在会怎样?请记住,您的应用程序只能从商店安装,因此它不能依赖桌面服务的存在。
-
企业似乎可以旁加载自定义应用程序并绕过 Windows 应用商店。如果是这样,那么您可以假设某些应用程序在企业环境中运行是有道理的。也就是说,我认为原始发帖人应该为他的目的使用桌面 WPF 前端。
标签: c# wpf winapi windows-8 windows-runtime