Web应用程序和桌面应用程序之间的双向通信

Two-way communication between web application and desktop application

我很好奇这种情况是否可能发生:

  1. .Net Windows Forms 应用程序(我们的产品)公开了几个 WCF 服务(自托管,例如在“http://localhost:8000/myservice/method1”上),运行 处于提升模式。
  2. public 域上的 Web 应用程序(来自其他制造商),它将以双向模式与我们的应用程序通信:
    1. Web 应用程序到桌面应用程序:在我们的应用程序设置期间,我们注册了一个自定义协议 'xxx'(类似于 'mailto')并将我们的应用程序设置为该协议的处理程序。因此,Web 应用程序可以通过 'href="xxx:parameters"'.
    2. 形式的链接在我们的桌面应用程序中触发一个动作
    3. 桌面应用程序到 Web 应用程序:Web 应用程序会定期(例如每秒)通过 javascript ajax 调用轮询我们的 localhost WCF 服务.

2.2 选项是否可行?我们应该为 WCF 服务使用哪个绑定?跨域调用(从 public 域到本地主机)是否有任何问题?

编辑 - 是的,通信不是双向的,因为在我们的场景中,桌面应用程序无法直接操作 Web 应用程序。轮询选项只是一个如何从桌面应用程序获取状态到 Web 应用程序的想法,所以如果有更好的选择,我非常想听听它:)

Web 应用程序和桌面应用程序之间的通信还有一些其他选择(java 插件、IE 的 active x、firefox 插件、chrome 本机插件,...)但是它们对于新版本的浏览器、java 的版本、Windows 的版本,这些都非常脆弱,你必须维护所有这些。我们正在寻找一个适用于所有主要浏览器的选项,并且负责 Web 应用程序的制造商将尽可能少地工作。

Is the 2.2 option even possible?

Yes

Which binding should we use for WCF services?

  1. 对于来自 Web 应用程序的传入调用(href 链接),您应该使用 WCF webHttpBinding or something like Nancy 将您的服务操作公开为 REST 端点,这要轻得多。

  2. 如前所述,对于轮询,您需要托管另一个 REST 端点。

Two-way communication between web application and desktop application

根据您的描述,这似乎不是真正的双向要求,如双工(双向调用)。在这两种情况下,您都概述了来自合作伙伴网站的呼叫。只是响应以相反的方式传播,还是我遗漏了什么?

The polling option is just an idea how to get state from desktop application to web application

严格来说,投票发起者不是 Web 应用 本身 ,而是通过 JavaScript 的客户端浏览器。除了使用客户端应用程序作为桌面和服务器之间的中介的任何架构问题外,在浏览器中实现 cross-origin scripting 还存在一个非常复杂的问题。

我建议更好的解决方案是在状态更改时从桌面应用程序调用 Web 应用程序,然后通过 ajax 轮询(以网络应用程序)或 something like SignalR

这对您的合作伙伴来说可能不会有太多工作,因为尽管他们需要托管一个新的 "Status Changed" 端点供您调用,但 ajax 轮询任务可能会更简单,因为他们会轮询自己的服务而不是您的服务。