2013-05-14 52 views
1

我正在開發一個基本的Youtube遠程控制的小項目,從而我的PC上運行了一個幫助程序,然後可以發送命令來自通過我的手機上的網絡瀏覽器訪問的網站。需要通過asp.net網站控制C#winforms應用程序的一些建議

閱讀其他網站上的線索,試圖做同樣的事情我已經意識到這不是一個大多數人會感到舒服的概念,但我正在努力想辦法做到超越寫作我的手機原生應用程序,並通過WLAN與助手應用程序進行通信(很樂意做到這一點,但沒有現金來彈出一個新的Mac爲我的iPhone開發)。

如果我堅持使用Website/Winforms模型,是否有辦法以(大多數)人會舒適地運行的方式來完成此操作?

我有想法到目前爲止是:

一)建立一個Web服務器到助手應用程序(雖然不知道有它舉辦一個ASP.net網站)

B)主機的物流該網站外部,並有助手的應用程序定期輪詢服務器上的數據庫/ web服務器接收命令(粗略和我想象非常資源沉重)

對不起,我可以運行一個想法並構建它,我只是不確定什麼是可能的,並認爲是做這種事情的「最佳」方式。

任何意見,將不勝感激。

乾杯

編輯謝謝,只是要清楚,當我說難受,我的意思是 - 你會沒事的與有一個網站能夠發送潛在的任何命令添加到您的計算機?這似乎是在關於這個主題的其他討論中提出的問題。顯然,我並沒有試圖做任何惡意的事情,但正如我所說,這似乎是一個問題。

+0

你是一個有點不清楚人爲什麼會不舒服,如果你想舒適度相關的答案,你需要這個清晰。 –

+0

感謝您的回覆Robert,我希望我在編輯中有足夠的闡述。 –

回答

0

如果這是一個受控環境,您可以隨時在防火牆上打開傳入通信的端口,則可以讓Web應用程序通過用戶防火牆將WCF呼叫回Windows客戶端。

如果沒有(這是我懷疑的),你可能會更好地輪詢Web服務。只需每隔幾秒做一次,無論您在Web服務調用(數據庫?)中檢查什麼,都要確保它已經過優化。也許只是讓它返回一些狀態int/enum或者非常輕的重量來指示客戶端在下一次調用時發出(0 =沒有更新,1 = command1,2 = command2等)。

至於你怎麼做投票,你可以這樣做:

int seconds = 4; 
System.Timers.Timer _clientTimer = new System.Timers.Timer(seconds * 1000); 
_clientTimer.AutoReset = false; 
_clientTimer.Elapsed += clientTimer_Elapsed; 
_clientTimer.Start(); 

private void clientTimer_Elapsed(object sender, ElapsedEventArgs e) 
{ 
    try 
    { 
     // Connect to web service, get status, if status != 0 do something... 
    } 
    finally 
    { 
     _clientTimer.Start(); 
    } 
} 

注:自動復位=,每次經過的事件觸發時,計時器停止虛假手段。在我採取的方法中,我讓計時器停止,以便客戶端可以處理Web服務結果,然後在完成後再次啓動計時器。這將有助於防止多個請求堆疊起來,如果連接真的很慢。

這是所有我能想到的:)

+0

謝謝Adam!狀態調用是一個好主意,我認爲如果我沿着投票路線走,那肯定會成爲這樣做的途徑。 –

+0

我正在尋找更多的WCF的想法,我很高興它是一個受控制的環境,我寧願保持內部通過網絡,而不是投票到我託管的服務器,如果我可以。儘管我對WCF的可能性瞭解不多。我的'幫手'winforms應用程序可以運行服務,然後讓網站打電話給它?我認爲它是內部的,需要由應用程序託管的網站,儘管這將我帶回計劃A ... –

+0

這兩種方法都有明顯的優點和缺點。通過執行WCF,您需要在路由器和客戶端機器上運行的任何軟件防火牆上打開端口,但與輪詢方法相比,它將使用更少的資源/流量。在我的工作中,我們也需要一個網頁來與Winforms應用程序進行通信。我們實際上已經擺脫了WCF方法(實際上它的前身:.NET Remoting)到輪詢方法,因爲它需要太多的客戶端配置。不過,這取決於你的情況。 –