一尘不染

Windows 8中的Metro应用程序如何与同一台计算机上的后端桌面应用程序通信?

c#

如果您具有使用Windows
8的Metro新应用程序构建的UI前端,并且希望它与运行在同一本地计算机上的桌面上的.NET应用程序(例如Windows服务应用程序)进行通信,则这种情况。

Metro应用程序和桌面应用程序之间可以使用哪些形式的进程间通信?

感谢Visual Studio团队的Pavel Minaev,他在此处的注释中提供了一些初始信息,并引用了:

根据马丁·洛夫(Martyn
Lovell)的说法,没有任何故意的机制,有意使用的机制受到有意限制。例如,命名管道不存在,内存映射文件也不存在。有套接字(包括服务器套接字),但是当连接到本地主机时,您只能连接到同一应用程序。您可以在共享的“已知文件夹”之一中使用普通文件(“文档”,“图片”等),但这是一个相当粗糙的技巧,需要轮询并且对用户可见。-
帕维尔Minaev评论这个问题

因此,如果无法使用常规方法,我会考虑使用Web服务或对数据库进行读/写操作,以实现某种形式的通信,而当进程在同一台计算机上运行时,这两种方法似乎都显得过分了。

我在这里尝试的是有意义的吗?我可以看到需要将Metro应用程序作为桌面上运行的现有服务的前端UI。还是将WPF用于在桌面上运行的前端UI(即非地铁应用程序)会更好。


阅读 257

收藏
2020-05-19

共1个答案

一尘不染

我现在将现有项目移植到Win8。它由Windows服务和托盘应用程序组成,它们通过NamedPipes
WCF相互通信。您可能已经知道Metro不支持命名管道。我最终使用TcpBinding进行全双工连接。

这篇文章描述了支持的功能。

Metro客户端可以使用的WCF服务器示例在
此处

另外请记住,您不能在Metro中使用同步WCF。您将必须使用仅基于异步的基于任务的包装器。

并感谢您的提问。我对我来说是个好起点:)

2020-05-19