【问题标题】:Communicate between a browser application and .net Windows application在浏览器应用程序和 .net Windows 应用程序之间进行通信
【发布时间】:2014-06-25 04:48:12
【问题描述】:

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

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

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

您是否知道该问题的更好解决方案?

【问题讨论】:

    标签: javascript .net web pipe ipc


    【解决方案1】:

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

    但是,鉴于 .net 客户端应用程序可能会在与最初预期不同的端口上启动网络服务器,如果这些端口正在使用中,则 javascript 应用程序可能无法识别网络服务器正在运行的端口

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

    【讨论】:

    • 如果指定端口被另一个应用程序使用(通常不会),.net 套接字服务器将无法启动并需要在另一个端口上启动。如果您在机器上启动应用程序,然后在另一个用户上切换用户并再次启动应用程序,则可以重现这种情况。 .net 客户端会意识到该端口正在使用中,并且可以选择不启动服务器或选择另一个端口。在这种情况下,没有通知 javascript 应用程序的机制。
    • 这就是我提到本地存储的原因:) .NET 应用程序可以将“我正在服务的活动端口”写入本地存储设置。 Javascript 在连接时可以从本地存储中读取相同的内容。 .NET 应用程序可以写入并且 JS 应用程序可以读取的任何介质都可以解决这个问题,不是吗?我的问题是:我们能否在没有元数据的情况下解决这个问题。
    • 我错过了你说的保存到本地存储的部分。如何从 java 脚本访问本地存储?
    • 我将从这里开始:stackoverflow.com/questions/4692245/…。实际上,读取和写入很简单,复杂的是浏览器兼容性。如果您需要在 IE8 或其他设备上运行,可以使用 shims :) 但对于最新的浏览器,我相信它是可靠的。
    • 感谢阅读。因为我还没有足够的代表,所以我无法对答案进行投票。将其标记为答案,因为我没有看到其他方式。
    【解决方案2】:

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

    有了它,您可以构建一个允许client (js) <-> server <-> client (.NET) 通信的解决方案。

    这里有一些有用的链接可以帮助您入门:

    【讨论】:

    • 如果托管 javascript 应用程序的 Web 应用程序是由我开发的,这将有效。托管网络应用程序是由另一方开发的,我只开发他们将包含在他们的网站上并初始化的 javascript 应用程序。
    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多