2014-05-08 44 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

相關問題