2012-05-28 134 views
4

我正在用桌面和移動應用程序組件編寫應用程序。桌面應用程序正在用c#編寫,我希望能夠打開它作爲移動應用程序的服務器(類似於AirVideo的服務器)。如何在不需要用戶配置其防火牆和/或路由器的情況下完成此任務?如何允許遠程連接到我的.net應用程序?

理想情況下,我想在桌面應用程序中自行託管一個寧靜的wcf服務。我已經試過了,但防火牆的自動配置不允許遠程連接到wcf服務,因爲它似乎是由系統進程託管的。有這種行爲的解決方法嗎?

編輯:我已經解決了路由器問題,儘可能通過使用NATUPnP COM庫(http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through- NAT-路由器,通過-UPnP.aspx)。我仍然需要知道如何通過防火牆遠程連接到自行託管的WCF服務,而無需任何手動配置防火牆(我可以在用戶提示符允許連接後啓動應用程序)。

+0

當使用WCF時,您配置什麼類型的端點?最壞的情況下,您應該能夠通過HTTP/HTTPS進行通信,而無需更改任何防火牆。你也可以看看微軟的UPnP框架:http://msdn.microsoft.com/en-us/library/windows/desktop/aa382303(v=vs.85).aspx –

+0

現在我使用webHttpBindings,因爲我想該服務將成爲REST服務。我沒有和配置結婚,所以如果有另一種類型的端點沒有被守護進程託管,我會考慮它。 – Todd

回答

2

在路由器中設置一個指定路由到您的服務器地址的具體端口
因此,如果您的路由器真實IP爲abcd,則應該設置所有與abcd:port#的通信都路由到您的服務器本地地址。 (a.b.c.d:port# - > serverIP)

可以通過路由器配置實現此設置。

在您無法修改路由器設置/防火牆設置的情況下:
這意味着您不能使用端口偵聽傳入連接,並且只能使用傳出連接。爲了克服這一點,你將不得不使用具有真實IP地址的第三臺服務器,該服務器將充當雙方的監聽器。典型的情況下可以被描述爲如下:

客戶端 - A(桌面)
客戶機端 - B(智能手機)
服務器端 - S(通信服務器)

  1. 的S - >打開端口以偵聽傳入連接。
  2. A - >每隔x秒連接到S以檢查是否有請求執行某些操作。
  3. 乙 - >連接到S.(發出對一個等待請求)

該S方式充當代理粘上兩面的通信。

+0

感謝您的建議,但路由器目前不是我的問題。我遇到的問題是首次啓動應用程序時彈出的對話框詢問用戶是否要允許網絡連接,這會導致添加防火牆規則,允許連接到我的特定應用程序(即myapp.exe )。不幸的是,系統過程實際上最終託管了服務,所以防火牆規則是無效的。 我可以手動配置防火牆,但我不想要求用戶手動配置防火牆。 – Todd

+0

你是否啓用了兩個防火牆? (窗口和路由器) –

+0

是的,但對於我的應用程序的任何用戶來說,這是一個可能的場景。我的用戶將是普通的計算機用戶,因此要求他們配置他們的防火牆或路由器是不可能的。 – Todd