2013-10-24 86 views
0

實際上請在將它置於保留狀態之前閱讀我的文章!從服務器訪問客戶端上的數據

讓我開始說我整個下午都在尋找解決方案,到目前爲止我已經看到了很多WCF的例子,但沒有一個能夠滿足我需要的。

我已經在c#中開發了一個應用程序,它將安裝在客戶服務器上並訪問客戶本地網絡上的sql服務器。該應用程序還可以控制客戶本地網絡上的網絡中繼,並在sql中記錄這些中繼的狀態。我試圖找出讓客戶的服務器與我們的數據中心建立連接並能夠向客戶的服務器發出命令(從sql檢索數據集,控制網絡中繼等)的方法。我發現有很多方法可以讓客戶端在服務器上調用類,但迄今爲止找不到相反的結果。一個考慮是編寫一個Web服務作爲客戶的服務器上的應用程序的一部分,但需要一種方法來建立這種連接,爲客戶提供動態IP地址,而不必通過防火牆來發布等

+0

你考慮過使用VPN嗎? – Tony

+0

您是否考慮在ADSL調制解調器上配置端口重定向,並使用諸如www.noip.com之類的解決方案? – Tony

+0

我有,但是我們正在考慮成千上萬的客戶,不想讓客戶不得不重新使用他們的網絡來使用我們的軟件。至於noip或dyndns,我們寧可不使用這些,因爲我們將通過他們的調制解調器發佈Web服務。我正在尋找一種解決方案,在c#中,我們將某種網絡流打開回到具有身份的服務器,並且我們可以反過來請求數據,類似於服務等待的logmein架構。 – alucky8ball

回答

0

你有沒有考慮使用

  • VPN - 虛擬專用網

  • 配置一個端口轉發在ADSL調制解調器上重定向,並使用像www.noip.com這樣的解決方案?
+0

請參閱上面的評論回覆。 – alucky8ball

+0

哦,好的,考慮到規模,需要更好的方法。 – Tony

0

如果我理解正確的話,你想從客戶的數據庫,這是在防火牆後面,沒有已知的靜態IP,除了可能有幾百個客戶,使專用的VPN客戶信息是不可行。

首先:您不應該直接聯繫客戶數據庫。數據庫不是爲這種情況設計的,如果直接暴露在互聯網上,數據庫可能會受到攻擊。 所以你需要一個在數據庫之上的服務。還有您可以使用這項服務兩個主要選項:

查詢服務

的服務實際上是一個客戶打電話給你網絡上的某些網絡服務,並請示。
好處:易於實施和部署。
缺點:通過輪詢,可擴展性/帶寬使用與服務速度之間始終存在成本收益。在選擇輪詢時間以防止同時阻止所有客戶端輪詢時,還有一些注意事項。

該服務是一個TCP-服務器

這可以是一個通常的web服務(或服務的REST類型)或某一其它服務。唯一的區別是它需要宣傳自己。爲此你需要有一個已知的目錄服務器。當服務啓動時,它連接到目錄服務並告訴它可以聯繫的端口(該目錄知道來自連接的IP)。然後它需要定期聯繫目錄,讓它知道它仍然存在,所以檢測到IP的任何變化。
網絡上的客戶端現在將查詢目錄以查找客戶端的地址,並直接連接到它以發出命令。

收益:可擴展且帶寬效率高。
下行:難以實施。需要防火牆穿越解決方案(UPNP或防火牆例外)。

+0

這正是我們需要的。與其讓應用程序與目錄服務器通信以告訴我們它位於何處,我們是否可以讓它回到我們的數據中心並建立一個tcp流到我們的服務器,然後我們可以使用它將請求發送回客戶服務器? – alucky8ball

+0

這是第一個選項(輪詢服務器)。一個簡單的客戶端應用程序調用您的服務器並請求命令。然後你可以告訴它要獲得什麼數據。問題在於它需要輪詢,因爲它無法知道您何時想要獲取數據。 –

相關問題