繁体   English   中英

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

[英]Two-way communication between web application and desktop application

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

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

2.2选项甚至可能吗? WCF服务应使用哪种绑定? 跨域调用(从公共域到本地主机)是否存在任何问题?

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

Web应用程序和桌面应用程序之间还有其他几种通信方式(Java插件,用于IE的Active X,firefox插件,chrome本机插件等),但是对于新版本的浏览器,Java版本, Windows版本...,则必须维护所有这些。 我们正在寻找可以在所有主要浏览器上使用的选项,并且负责Web应用程序的制造商将尽可能少地工作。

2.2选项甚至可能吗?

WCF服务应使用哪种绑定?

  1. 对于来自Web应用程序的传入呼叫(href链接),您应该使用WCF webHttpBinding或类似Nancy的东西将您的服务操作公开为REST终结点,这要轻得多。

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

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

根据您的描述,这似乎不是真正的双向要求,就像在双工中一样(双向通话)。 在这两种情况下,您都将概述呼叫源自合作伙伴网站。 只是反应是相反的,还是我错过了什么?

轮询选项只是一个如何从桌面应用程序获取状态到Web应用程序的想法

严格地说,轮询鼻祖不是Web应用程序本身 ,而是通过JavaScript客户端浏览器。 除了使用客户端应用程序作为台式机和服务器之间的中介的任何架构问题之外,在浏览器中实现跨域脚本编写还存在非常复杂的问题。

我建议一个更好的解决方案是在状态更改时从桌面应用程序调用Web应用程序,然后让Web应用程序通过Ajax轮询(到Web应用程序)或诸如SignalR来“通知” Web客户端。

这可能对您的合作伙伴来说并没有更多的工作,因为他们需要托管一个新的“状态已更改”端点供您调用,而ajax轮询任务可能更简单,因为他们将轮询自己的服务而不是你的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM