2014-05-08 41 views
3

要求是在作为Windows应用程序的.net客户端应用程序和运行在浏览器上的javascript应用程序之间提供双工通信方法。在浏览器应用程序和.net Windows应用程序之间进行通信

流程为 1.用户在其机器上安装客户端应用程序。 2.用户访问该网站并登录到托管JavaScript应用程序的门户。 3.如果用户在客户端.net应用程序上执行活动,则需要通知JavaScript应用程序。 4.如果用户在浏览器上的JavaScript应用程序上执行活动,则必须通知.net客户端应用程序。

尝试的可能解决方案是 1. Web服务器.net客户端应用程序,其中JavaScript应用程序使用Web套接字连接。但是,如果.net客户端应用程序可能会在最初打算的不同端口上启动网络服务器,如果使用的端口中,JavaScript应用程序可能无法识别Web服务器正在运行的端口。 2.在javacript应用程序上运行activeX。活动的X和.net应用程序都将通过WCF通过本地命名管道进行连接。不好的部分是使用活动的X,在加载Web应用程序时会立即弹出。

您知道更好的解决方案吗?

回答

3

我们已成功地使用WebSockets进行浏览器内部Javascript与运行WebSocket服务器的外部应用程序之间的双向通信。这是有效的,并且(至少在去年)绕过了所有浏览器沙箱限制。我不是100%的理解你的问题的这部分:

但是考虑到.NET客户端应用程序可能会启动不同的端口比原本打算在Web服务器上,如果正在使用的端口,JavaScript的应用程序可能不能够识别Web服务器正在运行的端口

.NET应用程序可以在任何需要的端口上运行套接字服务器。如果您正在编写这两个应用程序,我没有看到如何在特定端口上同步会是一个问题?最糟糕的情况是桌面应用程序可能会将端口写入本地存储,您的JS可以通过本地存储获取该端口。还有其他方法可以同步。

+0

如果指定端口,被其他应用程序使用(一般不会).net套接字服务器将无法启动并将r有意在另一个港口启动。如果你在一台机器上启动应用程序,然后做一个切换用户,在另一个用户上并再次启动应用程序,这可以被复制。 .net客户端会意识到端口正在使用中,并且可以选择不启动服务器或选择另一个端口。在这种情况下,没有通知JavaScript应用程序的机制。 – user3614386

+0

这就是为什么我提到了本地存储:) .NET应用程序可以将“正在服务的活动端口”写为本地存储设置。当它连接时,Javascript可以从本地存储中读取相同的内容。 .NET应用程序可以写入的任何介质以及JS应用程序都可以读取的介质可以解决此问题,不是吗?我的问题是:我们可以解决这个*没有*元数据。 –

+0

我错过了你说的保存到本地存储的部分。如何从Java脚本访问本地存储? – user3614386

0

SignalR是一个通信API,具有用于.NET和JavaScript的客户端库,并且服务器库构建在ASP.NET堆栈上。

有了它,你就可以构建一个允许通讯的解决方案。

下面是一些有用的链接,让你开始:

+0

如果托管JavaScript应用程序的Web应用程序是由我开发的,那么这种方法就行得通了。托管网站应用程序由另一方开发,我只开发他们将包含在他们的网站上并初始化的JavaScript应用程序。 – user3614386

相关问题