2010-10-15 48 views
1

我目前正在开发带棱镜的silverlight应用程序。从这个应用程序我需要能够发送命令或击键到客户端应用程序。什么是完成这个最好的方法?如何使用silverlight与客户端应用程序进行通信

事情我考虑:

的Javascript可以使用ActiveX对象使用DDE。 (仅限于IE浏览器)

Javascript可以与java applet进行交互以使用DDE。 (必须正确处理applet的签名)

如果运行Out of Browser,Silverlight 4可以访问COM对象。 (我想避免用完浏览器)

是否有任何其他选项可以忽略?

回答

1

除了其他建议,如果您使用类似Firebreath的东西来开发上面提到的那种ActiveX控件,您可以免费获得一个与您的控件完全相同的NPAPI接口。这将允许您在本地(C++)代码中创建一个控件,然后在所有主流浏览器中运行;然后您可以通过其JavaScript桥与Silverlight中的控件进行交谈。当然,任何依赖向另一个应用程序发送击键的应用程序都会非常脆弱,所以你必须设计好你的界面,以确保当你使用其他应用程序时,事情不会突然发生。控制打嗝。

+0

所以......我在这里有点困惑。您可以使用Firebreath来包装ActiveX控件,以便它可以在任何浏览器中使用? – 2010-10-15 17:10:45

+0

不完全 - 您使用Firebreath框架编写控件,编译控件时,它会为IE(在幕后使用ATL)和其他所有内容都生成一个ActiveX接口(使用ATL)。同一个DLL承载两个接口,一旦安装并注册,同样的JavaScript将在IE,Firefox和Chrome上都能正常工作。合理?唯一的缺点就是Firebreath要求你使用CMake作为控件的构建系统,这有点痛苦,但可能值得你获得。 – 2010-10-15 17:44:54

+0

嗯是的,这是有道理的。绝对是一个可行的选择,+1。我需要决定是否比制作Java applet更好。谢谢。 – 2010-10-15 18:23:28

0

这是一种矫枉过正,但如果客户端应用程序在你的控制,你可以只举办一个小型的http容器和岗位为localhost:Silverlight的:)端口

0
+0

这不是用于服务器到SL客户端的交互,而不是SL客户端到客户端? – 2010-10-15 17:10:00

+0

这个SL是SL还是SL到.NET还是什么?如果客户端应用程序是.NET,则可以将使用双面打印服务作为客户端应用程序的一部分。这可能有点沉重,但它在抽象两个客户端之间的交互方面做得很好。 – Stephan 2010-10-15 17:45:45

+1

理论上,您可以将WCF双工服务托管在也驻留在客户端的可执行文件中,但我同意这看起来像是过度杀毒。不过,它强调了这个想法,即Silverlight有效地实现了四种“到达沙盒外”的方式:(1)Javascript; (2)WCF; (3)插座; (4)COM Interop(运行OOB时)。如果SL在浏览器中运行,您可以以某种方式使用前三种方法中的任何一种与框中运行的其他进程进行通信 - 您只需要对这些进程进行足够的控制,以便在发生敲打时让Silverlight进入。 – 2010-10-15 17:52:47

相关问题